2013-05-02 12 views
12

ごとにグループ化され、以前の非欠損値、とパンダのデータが欠落して入力します。私は、以前の非NANと各NAN「X」を置換したい私はこのようなパンダのデータフレームを扱っていますキー

id x 
0 1 10 
1 1 20 
2 2 100 
3 2 200 
4 1 NaN 
5 2 NaN 
6 1 300 
7 1 NaN 

「X」と同じ「ID」値を持つ行から:

id x 
0 1 10 
1 1 20 
2 2 100 
3 2 200 
4 1 20 
5 2 200 
6 1 300 
7 1 300 

は手動で行をループせずにこれを行うには、いくつかの巧みな方法はありますか?

答えて

16

あなたは、各グループのgroupby/forward-fill操作を実行できます。

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'id': [1,1,2,2,1,2,1,1], 'x':[10,20,100,200,np.nan,np.nan,300,np.nan]}) 
df['x'] = df.groupby(['id'])['x'].ffill() 
print(df) 

利回り

id  x 
0 1 10.0 
1 1 20.0 
2 2 100.0 
3 2 200.0 
4 1 20.0 
5 2 200.0 
6 1 300.0 
7 1 300.0 
+0

'ffill' オプションは、私は必要なものです。ありがとう! – ChrisB

+1

また、 'df ['x'] = df.groupby( 'id')。fillna(method = 'ffill')'を実行すると、少し単純な構文で同じ結果を得ることができます。 – Zhang18

+0

@ Zhang18:改善をありがとう。 'df.groupby(['id']).ffill()'も動作します。 – unutbu

関連する問題