Pandas groupby+ifelse+将新列添加回原始d

2024-10-02 02:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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。我希望执行按Group分组的ifelse操作,然后将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))

Tags: 数据方法importpandasdf原始数据asnp
1条回答
网友
1楼 · 发布于 2024-10-02 02:34:09

您可以按^{}>)列Value1^{}ed列Value1比较True/False1/0的最后一个强制布尔掩码到整数:

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)

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

相关问题 更多 >

    热门问题