熊猫Groupby如何在DataFrame中显示零计数

发布于 2021-01-29 14:59:27

我有以下熊猫数据框:

Name   | EventSignupNo | Attended | Points
Smith  | 0145          | Y        | 20.24
Smith  | 0174          | Y        | 29.14
Smith  | 0239          | N        | 0
Adams  | 0145          | N        | 0
Adams  | 0174          | Y        | 33.43
Morgan | 0239          | Y        | 31.23
Morgan | 0244          | Y        | 23.15

我想计算的是每人参加和未参加的活动数量,以及每人的总积分。所以我做一个groupby:df.groupby([Name, Attended]).agg({"Attended": "count", "Points": "sum"}).rename(columns = {"Attended: "Count"}).reset_index()

这会给我类似的东西:

Name   | Attended | Count | Points
Smith  | Y        | 2     | 49.38
Smith  | N        | 1     | 0
Adams  | Y        | 1     | 33.43
Adams  | N        | 1     | 0
Morgan | Y        | 2     | 54.38

但我想要类似的东西:

Name   | Attended | Count | Points
Smith  | Y        | 2     | 49.38
Smith  | N        | 1     | 0
Adams  | Y        | 1     | 33.43
Adams  | N        | 1     | 0
Morgan | Y        | 2     | 54.38
Morgan | N        | 0     | 0

我尝试使用pd.MultiIndex尝试填充丢失的零计数,但无济于事。我已经阅读了其他类似的问题,但是在使用MultiIndex处理连续点列时遇到了麻烦。任何想法如何做到这一点?

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

    您可以使用groupby+做到这一点agg。为了您与精确的输出Y,并N在每个级别,你需要reindex

    g = df.groupby(['Name', 'Attended'], sort=False).Points.agg(['count', 'sum'])
    
    g
                     count    sum
    Name   Attended              
    Smith  Y             2  49.38
           N             1   0.00
    Adams  N             1   0.00
           Y             1  33.43
    Morgan Y             2  54.38
    
    
    
    idx = pd.MultiIndex.from_product([g.index.levels[0], ['Y', 'N']])
    
    idx
    MultiIndex(levels=[['Adams', 'Morgan', 'Smith'], ['N', 'Y']],
               labels=[[2, 2, 0, 0, 1, 1], [1, 0, 1, 0, 1, 0]])
    
    
    g.reindex(idx, fill_value=0)
    
              count    sum
    Smith  Y      2  49.38
           N      1   0.00
    Adams  Y      1  33.43
           N      1   0.00
    Morgan Y      2  54.38
           N      0   0.00
    


知识点
面圈网VIP题库

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

去下载看看