(pandas) 为什么 .bfill().ffill() 对组的作用与 ffill().bfill() 不同?

2023-12-15

我认为我在概念上遗漏了一些基本概念,但我无法在文档中找到答案。

>>> df=pd.DataFrame({'a':[1,1,2,2,3,3], 'b':[5,np.nan, 6, np.nan, np.nan, np.nan]})
>>> df
   a    b
0  1  5.0
1  1  NaN
2  2  6.0
3  2  NaN
4  3  NaN
5  3  NaN

使用 ffill() 然后使用 bfill():

>>> df.groupby('a')['b'].ffill().bfill()
0    5.0
1    5.0
2    6.0
3    6.0
4    NaN
5    NaN

使用 bfill(),然后使用 ffill():

>>> df.groupby('a')['b'].bfill().ffill()
0    5.0
1    5.0
2    6.0
3    6.0
4    6.0
5    6.0

第二种方式不会破坏分组吗?第一种方法是否始终确保仅使用该组中的其他值填充这些值?


我认为你需要:

print (df.groupby('a')['b'].apply(lambda x: x.ffill().bfill()))
0    5.0
1    5.0
2    6.0
3    6.0
4    NaN
5    NaN
Name: b, dtype: float64

print (df.groupby('a')['b'].apply(lambda x: x.bfill().ffill()))
0    5.0
1    5.0
2    6.0
3    6.0
4    NaN
5    NaN
Name: b, dtype: float64

因为在你的样本中只有第一个ffill or bfill is DataFrameGroupBy.ffill or DataFrameGroupBy.bfill,第二个是处理输出Series。所以它打破了群体,因为Series没有组。

print (df.groupby('a')['b'].ffill())
0    5.0
1    5.0
2    6.0
3    6.0
4    NaN
5    NaN
Name: b, dtype: float64

print (df.groupby('a')['b'].bfill())
0    5.0
1    NaN
2    6.0
3    NaN
4    NaN
5    NaN
Name: b, dtype: float64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(pandas) 为什么 .bfill().ffill() 对组的作用与 ffill().bfill() 不同? 的相关文章

随机推荐