如何为pandas中的每组做前向填充

HHH*_*HHH 7 python pandas imputation

我有一个类似于下面的数据框

id A   B   C   D E
1  2   3   4   5 5
1  NaN 4   NaN 6 7
2  3   4   5   6 6
2  NaN NaN 5   4 1
Run Code Online (Sandbox Code Playgroud)

我想为列做一个空值估算ABC在正向充填,但每个组。这意味着,我希望向前填充应用于每个id. 我怎样才能做到这一点?

jez*_*ael 15

使用GroupBy.ffill每团体向前填充所有列,但如果每个小组第一值是NaN在那儿没有更换,所以可以使用fillna和最后浇铸成整数:

print (df)
   id    A    B    C  D    E
0   1  2.0  3.0  4.0  5  NaN
1   1  NaN  4.0  NaN  6  NaN
2   2  3.0  4.0  5.0  6  6.0
3   2  NaN  NaN  5.0  4  1.0

cols = ['A','B','C']
df[['id'] + cols] = df.groupby('id')[cols].ffill().fillna(0).astype(int)
print (df)
   id  A  B  C  D    E
0   1  2  3  4  5  NaN
1   1  2  4  4  6  NaN
2   2  3  4  5  6  6.0
3   2  3  4  5  4  1.0
Run Code Online (Sandbox Code Playgroud)

细节:

print (df.groupby('id')[cols].ffill().fillna(0).astype(int))
   id  A  B  C
0   1  2  3  4
1   1  2  4  4
2   2  3  4  5
3   2  3  4  5
Run Code Online (Sandbox Code Playgroud)

或者:

cols = ['A','B','C']
df.update(df.groupby('id')[cols].ffill().fillna(0))
print (df)
   id    A    B    C  D    E
0   1  2.0  3.0  4.0  5  NaN
1   1  2.0  4.0  4.0  6  NaN
2   2  3.0  4.0  5.0  6  6.0
3   2  3.0  4.0  5.0  4  1.0
Run Code Online (Sandbox Code Playgroud)

  • 在这个例子中,“fillna(0)”有什么作用吗?我看不到任何 NaN 值现在为零,事实上我根本看不到任何零。错过这个可以吗? (3认同)