#python #pandas
#python #pandas
Вопрос:
извините, я новичок в python. предположим, у меня есть фрейм данных со значениями столбцов, повторяющимися с некоторыми интервалами
dest_num | dest_voltage | Изменения |
---|---|---|
322 | 45.1 | перестает отвечать |
322 | 45.5 | батарея |
322 | 46.7 | низкое напряжение |
322 | 43.2 | Нет |
322 | 42.1 | Нет |
322 | 41.1 | перестает отвечать |
322 | 45.1 | батарея |
322 | 43.4 | низкое напряжение |
322 | 43.2 | Нет |
322 | 42.1 | критическое напряжение |
322 | 40.1 | dest_outage |
здесь, как мы можем видеть, перестает отвечать дважды и оба раза имеет низкое напряжение, но критическое напряжение и dest_outage только один раз. есть ли способ перебрать все «перестает отвечать» и проверить, встречаются ли все три значения столбца «низкое напряжение», «критическое напряжение» и «dest_outage», и создать еще один фрейм данных только из отфильтрованного условия?
Ответ №1:
Вам нужно создать числовой идентификатор для каждой группы, с которой начинается группа stops responding
. Вы можете сделать это, проверив changes
, равно ли stops responding
значение, и получить совокупную сумму результатов.
Используя эту группировку, вы можете проверить, все ли значения в вашем требуемом списке находятся в changes
столбце для этой группы, и отфильтровать результаты, если они есть.
Вы, конечно, можете удалить столбец group, если он больше не нужен, но, похоже, это также может быть полезно после факта.
import pandas as pd
df = pd.DataFrame({'dest_num': [322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322],
'dest_voltage': [45.1,45.5,46.7,43.2,42.1,41.1,45.1,43.4,43.2,42.1,40.1],
'changes': ['stops responding','battery','low voltage','none','none',
'stops responding','battery','low voltage','none','critical voltage',
'dest_outage']})
values = ['low voltage','critical voltage','dest_outage']
df['group'] = df['changes'].eq('stops responding').cumsum()
df.groupby('group').filter(lambda x: all([v in x['changes'].values for v in values]))
Вывод
dest_num dest_voltage changes group
5 322 41.1 stops responding 2
6 322 45.1 battery 2
7 322 43.4 low voltage 2
8 322 43.2 none 2
9 322 42.1 critical voltage 2
10 322 40.1 dest_outage 2