我有一個熊貓數(shù)據(jù)框如下。我想根據(jù)每個 ORDER 對“NEW1”列執(zhí)行累計和。下面的代碼部分有效,但它不會忽略 Nan 的意思,我希望最后一行的“cumsum”值為 8import pandas as pdimport numpy as npdf = pd.DataFrame({'ORDER':["A", "A", "B", "B"], 'NEW1':[np.nan, 5, 8, np.nan]})df['cumsum'] = df.groupby(['ORDER'])['NEW1'].cumsum()df ORDER NEW1 cumsum0 A NaN NaN1 A 5.0 5.02 B 8.0 8.03 B NaN NaN我的預(yù)期輸出: ORDER NEW1 cumsum0 A NaN NaN1 A 5.0 5.02 B 8.0 8.03 B NaN 8.0
3 回答

開滿天機(jī)
TA貢獻(xiàn)1786條經(jīng)驗 獲得超13個贊
fillna()之前groupby,并使用transform
df['cumsum']=df.fillna(0).groupby('ORDER')['NEW1'].transform('cumsum')
ORDER NEW1 cumsum
0 A NaN 0.0
1 A 5.0 5.0
2 B 8.0 8.0
3 B NaN 8.0

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗 獲得超4個贊
您可能必須將 apply 與 lambda 一起使用:
df['cumsum'] = df.groupby(['ORDER'])['NEW1'].apply(lambda x: x.fillna(0).cumsum())

一只甜甜圈
TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
讓我們使用一個expanding sum,它會NaN按你喜歡的方式對待:
df['cumsum'] = df.groupby('ORDER')['NEW1'].expanding().sum().reset_index(0, drop=True)
ORDER NEW1 cumsum
0 A NaN NaN
1 A 5.0 5.0
2 B 8.0 8.0
3 B NaN 8.0
添加回答
舉報
0/150
提交
取消