小编典典

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

all

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

df = pd.DataFrame({'Event': ['A', 'B', 'A', 'A', 'B', 'C', 'B', 'B', 'A', 'C'], 
                   'Direction': ['UP', 'DOWN', 'UP', 'UP', 'DOWN', 'DOWN', 'DOWN', 'UP', 'DOWN', 'UP'],
                   'group':[1,2,3,3,3,4,4,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)

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


阅读 79

收藏
2022-08-07

共1个答案

小编典典

看这一步的输出:

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)
2022-08-07