首页 文章

如何在熊猫中为每组进行前进填充

提问于
浏览
1

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

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

我想对前向填充中的列 ABC 进行空值插补,但是对于每个组 . 这意味着,我希望在每个 id 上应用前向填充 . 我怎样才能做到这一点?

1 回答

  • 2

    对于所有列,使用GroupBy.ffill为每个组的前向填充,但如果每个组的第一个值是 NaN s,则没有替换,因此可以使用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
    

    详情:

    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
    

    要么:

    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
    

相关问题