У меня есть dataframe, который выглядит следующим образом. Самый правый столбец - это моя желаемая колонка:
Group Value1 Value2 TargetColumn
1 1 2 0
1 2 2 1
1 3 3 1
1 4 4 1
2 6 9 0
2 7 5 0
2 8 6 0
2 9 7 0
Если значение Value2
в заданной строке больше значения Value1
в предыдущей строке, тогда возвращайте 1 else 0. Я хочу выполнить эту операцию ifelse, сгруппированную по Group
а затем добавить TargetColumn
обратно в исходный фрейм.
Обычно я стараюсь:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Group': [1,1,1,1,2,2,2,2], 'Value1': [1,2,3,4,6,7,8,9], 'Value2': [2,2,3,4,9,5,6,7]})
df['TargetColumn'] = df.groupby(['Group'])(np.where(['Value2'] > ['Value1'].shift() , 1, 0))
Вы можете сравнить по gt
(>
) столбец Value1
по shift
колонке изд Value1
, последний литом булевой маски для целых чисел для True/False
в 1/0
:
df['TargetColumn'] = df['Value2'].gt(df.groupby('Group')['Value1'].shift()).astype(int)
Или используйте numpy.where
:
df['TargetColumn'] = np.where(df['Value2'].gt(df.groupby('Group')['Value1'].shift()), 1, 0)
print (df)
Group Value1 Value2 TargetColumn
0 1 1 2 0
1 1 2 2 1
2 1 3 3 1
3 1 4 4 1
4 2 6 9 0
5 2 7 5 0
6 2 8 6 0
7 2 9 7 0
pandas.Series.lt
меньше. Что я использую для меньше или равно (<=) и больше или равно (> =)?le
иge
-lt
gt
le
ge
ne
eq