为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 数据框中带有 group_by 的 If-else 语句

Pandas 数据框中带有 group_by 的 If-else 语句

潇湘沐 2023-06-20 14:05:02
我有一个 pdf df 包含四列:ID, t,x1和x2。import pandas as pddat = {'ID': [1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,6,6,6],        't': [0,1,2,3,0,1,2,0,1,2,3,0,1,2,0,1,0,1,2],        'x1' : [3.5,3.5,3.5,3.5,2.01,2.01,2.01,3.9,3.9,3.9,3.9,2.2,2.2,2.2,1.8,1.8,2.1,2.1,2.1],       'x2': [4,4,4,4,3,3,3,4,4,4,4,3,3,3,2,2,3,3,3]        }df = pd.DataFrame(dat, columns = ['ID', 't', 'x1','x2'])print (df)我需要创建一个新列y和group_by ID这样if t!=max(t) then y=1,if t==max(t) then y = x1-x2+1.输出看起来像:请注意,我有数百万条记录,所以解决方案越快越好。
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我们可以transform max结合np.where


df['y'] = np.where(df.t != df.groupby('ID').t.transform('max'), 1, df.x1-df.x2+1)

df

Out[221]: 

    ID  t    x1  x2     y

0    1  0  3.50   4  1.00

1    1  1  3.50   4  1.00

2    1  2  3.50   4  1.00

3    1  3  3.50   4  0.50

4    2  0  2.01   3  1.00

5    2  1  2.01   3  1.00

6    2  2  2.01   3  0.01

7    3  0  3.90   4  1.00

8    3  1  3.90   4  1.00

9    3  2  3.90   4  1.00

10   3  3  3.90   4  0.90

11   4  0  2.20   3  1.00

12   4  1  2.20   3  1.00

13   4  2  2.20   3  0.20

14   5  0  1.80   2  1.00

15   5  1  1.80   2  0.80

16   6  0  2.10   3  1.00

17   6  1  2.10   3  1.00

18   6  2  2.10   3  0.10


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信