我有一个如下所示的数据框。最右边的列是我想要的列:
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否则为0。我想按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))
答案 0 :(得分:3)
您可以按gt
(>
)列Value1
和shift
ed列Value1
进行比较,最后将布尔掩码转换为{{1}的整数}到True/False
:
1/0
或使用numpy.where
:
df['TargetColumn'] = df['Value2'].gt(df.groupby('Group')['Value1'].shift()).astype(int)
df['TargetColumn'] = np.where(df['Value2'].gt(df.groupby('Group')['Value1'].shift()), 1, 0)