熊猫groupby + ifelse +将新列添加回原始df

时间:2018-08-19 17:14:35

标签: python pandas numpy

我有一个如下所示的数据框。最右边的列是我想要的列:

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))

1 个答案:

答案 0 :(得分:3)

您可以按gt>)列Value1shift 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)
相关问题