如何对pandas中的每个组进行前填

发布于 2021-01-29 17:40:42

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

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。我怎样才能做到这一点?

关注者
0
被浏览
30
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用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
    

    详情:

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看