【问题标题】:pandas groupby when count is zero and how to include zero value in result当计数为零时熊猫 groupby 以及如何在结果中包含零值
【发布时间】: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 方法。有什么建议吗?

标签: python python-3.x pandas group-by count


【解决方案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
猜你喜欢
  • 2017-12-11
  • 2021-11-27
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多