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

我有一个 pdf df 包含四列:ID, t,x1和x2。


import pandas as pd

dat = {'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.

输出看起来像:

http://img3.mukewang.com/649141a1000136db03860683.jpg

请注意,我有数百万条记录,所以解决方案越快越好。



潇湘沐
浏览 120回答 1
1回答

ABOUTYOU

我们可以transform max结合np.wheredf['y'] = np.where(df.t != df.groupby('ID').t.transform('max'), 1, df.x1-df.x2+1)dfOut[221]:     ID  t    x1  x2     y0    1  0  3.50   4  1.001    1  1  3.50   4  1.002    1  2  3.50   4  1.003    1  3  3.50   4  0.504    2  0  2.01   3  1.005    2  1  2.01   3  1.006    2  2  2.01   3  0.017    3  0  3.90   4  1.008    3  1  3.90   4  1.009    3  2  3.90   4  1.0010   3  3  3.90   4  0.9011   4  0  2.20   3  1.0012   4  1  2.20   3  1.0013   4  2  2.20   3  0.2014   5  0  1.80   2  1.0015   5  1  1.80   2  0.8016   6  0  2.10   3  1.0017   6  1  2.10   3  1.0018   6  2  2.10   3  0.10
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python