gpt4 book ai didi

python - pandas ffill 的设置值

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:47 24 4
gpt4 key购买 nike

我想要与 pandas dataframe.fillna('ffill') 方法完全相同的行为,但我不想使用最后一个非 NaN 值,而是想自己选择值,例如

[NaN, NaN, NaN, 1, 2, 3, 4, 5, NaN, NaN, NaN]

应该变成

[NaN, NaN, NaN, 1, 2, 3, 4, 5, 0, 0, 0]

使用方法调用 df.fillnan(0, 'ffill')。

我可以通过遍历数据帧每一行中的每个值来实现这一点,但想知道是否有更优化的方法?

最佳答案

使用Series.where用于在前向填充后过滤非缺失值:

s = pd.Series([np.NaN, np.NaN, np.NaN, 1, 2, np.NaN, 4, 5, np.NaN, np.NaN, np.NaN])
print (s)
0 NaN
1 NaN
2 NaN
3 1.0
4 2.0
5 NaN
6 4.0
7 5.0
8 NaN
9 NaN
10 NaN
dtype: float64

s = s.where(s.ffill().isnull(), s.fillna(0))
print (s)
0 NaN
1 NaN
2 NaN
3 1.0
4 2.0
5 0.0
6 4.0
7 5.0
8 0.0
9 0.0
10 0.0
dtype: float64

按行工作的解决方案:

df = pd.DataFrame({
'B':[np.nan,np.nan,4,np.nan,5,np.nan],
'C':[7,8,9,4,np.nan,np.nan],
'D':[np.nan,np.nan,np.nan,np.nan,1,np.nan],
'E':[np.nan] * 6,

})

df1 = df.where(df.ffill(axis=1).isnull(), df.fillna(0))
print (df1)
B C D E
0 NaN 7.0 0.0 0.0
1 NaN 8.0 0.0 0.0
2 4.0 9.0 0.0 0.0
3 NaN 4.0 0.0 0.0
4 5.0 0.0 1.0 0.0
5 NaN NaN NaN NaN

另一个通过检查非缺失值创建的 bool 掩码解决方案,cumsum并通过 DataFrame.eq 进行比较:

df1 = df.where(df.notnull().cumsum(axis=1).eq(0), df.fillna(0))
print (df1)
B C D E
0 NaN 7.0 0.0 0.0
1 NaN 8.0 0.0 0.0
2 4.0 9.0 0.0 0.0
3 NaN 4.0 0.0 0.0
4 5.0 0.0 1.0 0.0
5 NaN NaN NaN NaN

关于python - pandas ffill 的设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com