(pandas)为什么.bfill()。ffill()的行为与ffill()。bfill()在群组上的行为不同?

时间:2017-06-07 05:04:32

标签: pandas group-by pandas-groupby

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

state value is 5

import Slider from react-native

 <Slider
                        minimumValue={0}
                        maximumValue={50}
                        onValueChange={(value) => this.setState({value: parseInt(value)})}
                        step={1} />
                      <Text>{parseInt(this.state.value)} KM</Text>

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

>>> 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

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

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

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

1 个答案:

答案 0 :(得分:8)

我认为你需要:

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

因为在您的示例中,只有ffillbfillDataFrameGroupBy.ffillDataFrameGroupBy.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