2017-06-07 1 views
1

概念的に何か基本的なものが欠けていると思いますが、私はドキュメントで答えを見つけることができません。 ffillその後、(pandas).bfill().ffill()が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=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()

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

は、第二の方法グループ化を破壊しません?最初の方法では、値がそのグループの他の値でのみ埋められていることを常に確認しますか?

答えて

2

私はあなたが必要だと思う。なぜなら、あなたのサンプル中

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 

のみ最初ffillbfillは、第二の出力Seriesと協力して、DataFrameGroupBy.ffillまたはDataFrameGroupBy.bfillです。 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 
関連する問題