为了账号安全,请及时绑定邮箱和手机立即绑定

在忽略 NAN 的 pandas 数据帧列上执行累加和

在忽略 NAN 的 pandas 数据帧列上执行累加和

DIEA 2023-03-30 10:40:09
我有一个熊猫数据框如下。我想根据每个 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


查看完整回答
反对 回复 2023-03-30
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您可能必须将 apply 与 lambda 一起使用:

df['cumsum'] = df.groupby(['ORDER'])['NEW1'].apply(lambda x: x.fillna(0).cumsum())



查看完整回答
反对 回复 2023-03-30
?
一只甜甜圈

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


查看完整回答
反对 回复 2023-03-30
  • 3 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信