我想跨列執行特定計算: pwr - base final 以創建“已使用”列。但是,這必須按 ID 和日期分組。一旦建立了第一個計算,第二個計算將是新創建的使用列的累積。這將是:用于每個日期行的列 最終結果。
資料
pwr pos id date base position final
100 40 aa q121 50 20 15
100 40 aa q221 50 20 25
100 40 aa q321 50 20 10
100 40 aa q421 50 20 5
50 30 bb q121 25 10 0
50 30 bb q221 25 10 10
想要的
pwr pos id date base position final used
100 40 aa q121 50 20 15 65
100 40 aa q221 50 20 25 90
100 40 aa q321 50 20 10 100
100 40 aa q421 50 20 5 105
50 30 bb q121 25 10 0 25
50 30 bb q221 25 10 10 35
正在做
df['used'] = df['pwr'].sub(df.groupby('id')['date'].cumsum()).sub(df.groupby('id')['base'].cumsum()).add(df.groupby('id')['final'].cumsum())
但是,最后一列計算不正確。任何建議表示贊賞。
uj5u.com熱心網友回復:
我們需要先找到第一項,將所有repeated值設為 NaN ,然后groupby使用cumsum
s = df['pwr'].sub(df['base']).mask(df['id'].duplicated()).add(df['final'],fill_value=0)
df['new'] = s.groupby(df['id']).cumsum()
df
pwr pos id date base position final new
0 100 40 aa q121 50 20 15 65.0
1 100 40 aa q221 50 20 25 90.0
2 100 40 aa q321 50 20 10 100.0
3 100 40 aa q421 50 20 5 105.0
4 50 30 bb q121 25 10 0 25.0
5 50 30 bb q221 25 10 10 35.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/338003.html
