Я хочу создать новый столбец в моем фрейме данных на основе переменной группировки в столбце в фрейме данных, а затем проверить наличие условий в другом столбце в фрейме данных.
Я попытался использовать np.where с pandas pd.groupby для создания столбца Status во фрейме данных, где я проверяю, больше ли следующее значение в столбце, чем текущее, на основе группировки каждого из Sensor_ID и на основании этого я пытаюсь назначить, еслистатус установлен на сброс или not_reset, однако у меня не получилось с кодом.
import pandas as pd
df = pd.DataFrame(data = {'Sensor_ID':['A1', 'A1', 'A1', 'A2','A2', 'A2', 'A2', 'A3', 'A3', 'A3', 'A3', 'A3'], 'Reading':[81, 83.5, 87, 90, 81, 82, 85, 78, 79, 78, 80, 78]})
df
Sensor_ID Reading
0 A1 81.0
1 A1 83.5
2 A1 87.0
3 A2 90.0
4 A2 81.0
5 A2 82.0
6 A2 85.0
7 A3 78.0
8 A3 79.0
9 A3 78.0
10 A3 80.0
11 A3 78.0
Я хочу создать следующее условие ниже, используя np.where, но я хочу использовать Sensor_ID какпеременная группировки.
df['Status'] = np.where(df.Reading.shift(-1) > df.Reading, 'not_reset', 'reset')
Я использовал np.where с groupby и преобразованием
df['Status'] = np.where(df.groupby('Sensor_ID')['Reading'].transform(df['Reading'].shift(-1) > df['Reading'], 'not_reset', 'reset'))
TypeError: 'Series' objects are mutable, thus they cannot be hashed
Я также пытался использовать apply и transform с groupby, но получаю ошибку:
df['Status'] = df.groupby('Sensor_ID').apply(lambda row: 'not_reset' if row['Reading'].shift(-1) > row['Reading'] else 'reset')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). --> As its comparing the whole series.
и
df['Status'] = df.groupby('Sensor_ID').transform(df['Reading'].shift(-1) > df['Reading'], 'not_reset', 'reset')
TypeError: 'Series' objects are mutable, thus they cannot be hashed
Ожидаемый результат:
Sensor_ID Reading Status
0 A1 81.0 not_reset
1 A1 83.5 not_reset
2 A1 87.0 not_reset
3 A2 90.0 not_reset
4 A2 81.0 reset
5 A2 82.0 not_reset
6 A2 85.0 not_reset
7 A3 78.0 not_reset
8 A3 79.0 not_reset
9 A3 78.0 reset
10 A3 80.0 not_reset
11 A3 78.0 reset