我有一个熊猫数据框如下。我想根据每个 ORDER 对“NEW1”列执行累计和。下面的代码部分有效,但它不会忽略 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我的预期输出: ORDER NEW1 cumsum0 A NaN NaN1 A 5.0 5.02 B 8.0 8.03 B NaN 8.0
3 回答
开满天机
TA贡献1786条经验 获得超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贡献2080条经验 获得超4个赞
您可能必须将 apply 与 lambda 一起使用:
df['cumsum'] = df.groupby(['ORDER'])['NEW1'].apply(lambda x: x.fillna(0).cumsum())
一只甜甜圈
TA贡献1836条经验 获得超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
提交
取消