当计数为零时熊猫 groupby 以及如何在结果中包含零值

Posted

技术标签:

【中文标题】当计数为零时熊猫 groupby 以及如何在结果中包含零值【英文标题】:pandas groupby when count is zero and how to include zero value in result 【发布时间】:2019-12-26 19:18:27 【问题描述】:

请考虑任何不使用 pivot_table()unstack()

的解决方案

对于以下数据框:

import pandas as pd

df = pd.DataFrame(
    'name': ['Mason', 'Ali', 'Si', 'Pedram'],
    'continent': ['Europe', 'Asia', 'Asia', 'Asia'],
    'blood_type': ['AB', 'O+', 'AB', 'AB']
)

这是:

    name     continent  blood_type
0   Mason    Europe     AB
1   Ali      Asia       O+
2   Si       Asia       AB
3   Pedram   Asia       AB

以下分组计数:

df.groupby(['continent', 'blood_type']).count()

将产生:

                           name
continent   blood_type  
Asia        AB             2
            O+             1
Europe      AB             1

相反,我怎样才能像下表一样包含零值计数? (不使用 pivot_tableunstack

                           name
continent   blood_type  
Asia        AB             2
            O+             1
Europe      AB             1
            O+             0

【问题讨论】:

纯熊猫是什么意思? pivot 和 unstack 是 pandas 方法 好的,对。为了避免任何混淆,我删除了“纯熊猫”。我不想使用 unstack stack 方法。有什么建议吗? 【参考方案1】:

截至pandas 0.25(或 0.24.2,现在不确定),如果您按类别 (pd.Categorical) 分组,它将显示最终计数中的所有值。

df.groupby([pd.Categorical(df.continent), 'blood_type']).count().fillna(0)

                   name  continent
       blood_type                 
Asia   AB           2.0        2.0
       O+           1.0        1.0
Europe AB           1.0        1.0
       O+           0.0        0.0

【讨论】:

嗨,它确实适用于 0.24.2,但它确实返回 NaN,这无论如何都很好。谢谢。 @pedrum 看看最后的fillna(0) ;p

以上是关于当计数为零时熊猫 groupby 以及如何在结果中包含零值的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中获得 False 的计数 [重复]

熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]

Groupby - 具有重复值的熊猫 df 计数

GroupBy 每周在熊猫中与其他列一起计数

如何在图表中绘制熊猫 groupby 值

如何在熊猫中的 groupby().mean() 之后获取索引值列表?