根据相似列的值将NA值填充到一列中


问题内容

这个问题已经在这里有了答案

使用groupby的熊猫fillna (1个答案)

3个月前关闭。

我想在给定值中填充nan的值,如下所示:

df = pd.DataFrame({'A' : ['aa', 'bb', 'cc', 'aa'], 
                   'B': ['xx', 'yy', 'zz','xx'], 
                   'C': ['2', '3','8', np.nan]})
print (df)

A  B  C
aa xx 2
bb yy 3
cc zz 8
aa xx NaN

预期产量:

A  B  C
aa xx 2
bb yy 3
cc zz 8
aa xx 2

由于列A和B在第三列中的值为2,因此最后一行在C列中也应具有2。


问题答案:

使用GroupBy.ffillDataFrame.sort_valuesDataFrame.sort_index用于NaNs到组的结尾:

df['C'] = df.sort_values(['A','B','C']).groupby(['A','B'])['C'].ffill().sort_index()
print (df)
    A   B  C
0  aa  xx  2
1  bb  yy  3
2  cc  zz  8
3  aa  xx  2

每组向前和向后填充的另一种解决方案:

df['C'] = df.groupby(['A','B'])['C'].apply(lambda x: x.ffill().bfill())