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

我有一个熊猫数据框如下。我想根据每个 ORDER 对“NEW1”列执行累计和。下面的代码部分有效,但它不会忽略 Nan 的意思,我希望最后一行的“cumsum”值为 8


import pandas as pd

import numpy as np

df = pd.DataFrame({'ORDER':["A", "A", "B", "B"], 'NEW1':[np.nan, 5, 8, np.nan]})

df['cumsum'] = df.groupby(['ORDER'])['NEW1'].cumsum()

df


    ORDER   NEW1    cumsum

0   A       NaN     NaN

1   A       5.0     5.0

2   B       8.0     8.0

3   B       NaN     NaN

我的预期输出:


    ORDER   NEW1    cumsum

0   A       NaN     NaN

1   A       5.0     5.0

2   B       8.0     8.0

3   B       NaN     8.0


DIEA
浏览 177回答 3
3回答

开满天机

fillna()之前groupby,并使用transformdf['cumsum']=df.fillna(0).groupby('ORDER')['NEW1'].transform('cumsum')ORDER  NEW1  cumsum0     A   NaN     0.01     A   5.0     5.02     B   8.0     8.03     B   NaN     8.0

犯罪嫌疑人X

您可能必须将 apply 与 lambda 一起使用:df['cumsum'] = df.groupby(['ORDER'])['NEW1'].apply(lambda x: x.fillna(0).cumsum())

一只甜甜圈

让我们使用一个expanding sum,它会NaN按你喜欢的方式对待:df['cumsum'] = df.groupby('ORDER')['NEW1'].expanding().sum().reset_index(0, drop=True)  ORDER  NEW1  cumsum0     A   NaN     NaN1     A   5.0     5.02     B   8.0     8.03     B   NaN     8.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python