使用以前的非缺失值填写缺失的pandas数据,按键分组

Chr*_*isB 16 python nan missing-data pandas data-cleaning

我正在处理像这样的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
Run Code Online (Sandbox Code Playgroud)

我想用一个具有相同'id'值的行替换每个NAN'x'和之前的非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
Run Code Online (Sandbox Code Playgroud)

有没有一些光滑的方法来做到这一点,而无需手动循环行?

unu*_*tbu 21

您可以对每个组执行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)
Run Code Online (Sandbox Code Playgroud)

产量

   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
Run Code Online (Sandbox Code Playgroud)

  • 您也可以执行 `df['x'] = df.groupby('id').fillna(method='ffill')` 来实现相同的语法,语法稍微简单一些。 (3认同)