亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號