1 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
通常,不需要自己創(chuàng)建所有這些子集,因?yàn)槟梢赃M(jìn)行“累積”計(jì)算來(lái)完成所需的操作。
C2 是每個(gè)“ID”內(nèi)的累加和( )的結(jié)果cumsum。pd.get_dummies您的虛擬列是每個(gè)組組內(nèi)的累積最大值( )的結(jié)果cummax(歸功于@Ben.T)。加入計(jì)算以concat獲得結(jié)果并使用groupby+ngroup標(biāo)記所需索引的每個(gè) ID。
# Dummies for C1
df1 = pd.get_dummies(df.C1)
df1 = df1.groupby(df['id']).cummax()
# Join, ID from df, dummies from df1 and cumsum
df1 = pd.concat([df['id'], df1, df.groupby('id')['C2'].cumsum()], axis=1)
# Create your index, breaks alignment of df and df1 from this point on
df1.index = df1.groupby(df['id'], sort=False).ngroup()
print(df1)
id 1A 1B 1C 2A 2B C2
0 1 1 0 0 0 0 100
0 1 1 1 0 0 0 300
0 1 1 1 1 0 0 600
1 2 0 0 0 1 0 400
1 2 0 0 0 1 1 900
添加回答
舉報(bào)