28

私は次のような pandas DataFrames を扱っています:

   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

各 NAN 'x' を、同じ 'id' 値を持つ行の前の非 NAN 'x' に置き換えたいと思います。

   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

行を手動でループせずにこれを行うための巧妙な方法はありますか?

4

3 に答える 3

38

各グループで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
于 2013-05-02T18:59:54.107 に答える