为什么在数据框系列上的几个运算符后fillna没有效果?

问题描述

看这一步的输出

print(df[(df.Event == 'A') & (df.Direction == 'UP')].groupby('group').cumcount().add(1))

# Output:
0    1
2    1
3    2
dtype: int64

您看到nan要填写的值吗?在这里添加.fillna(0)会做任何事情吗?


一个可以工作的班轮:

df['prev'] = df.assign(prev = df[(df.Event == 'A') & (df.Direction == 'UP')].groupby('group').cumcount().add(1))['prev'].fillna(0)

解决方法

我有看起来像这样的数据框:

df = pd.DataFrame({'Event': ['A','B','A','C','C'],'Direction': ['UP','DOWN','UP','UP'],'group':[1,2,3,4,5,5]})

一切正常,当我这样做时:

df['prev'] = df[(df.Event == 'A') & (df.Direction == 'UP')].groupby('group').cumcount().add(1)
df['prev'].fillna(0,inplace=True)

但是,如果我在一行中执行此操作,则 fillna() 函数将不起作用:

df['prev'] = df[(df.Event == 'A') & (df.Direction == 'UP')].groupby('group').cumcount().add(1).fillna(0)

我的问题是:为什么会这样?有没有办法在一条线上做到这一点?