【问题标题】:Pandas Category sub-group 0 countsPandas 类别子组 0 计数
【发布时间】:2017-08-23 03:43:42
【问题描述】:

我是 Pandas 的新手,正在尝试生成一个子组计数表,以保持类别顺序并显示零计数。这是一个简单的类别,有 4 个选项。

如果不分组,它会按预期工作,但分组后它不会显示零计数(请参阅最后一组)。

在 [21] 中:

df2['Call_cat'] = df2['Group_INV'].astype('category')
counts = df2['Call_cat'].value_counts(dropna=True, sort=False)
counts

输出[21]:

1.0    35773
2.0      290
3.0     8680
4.0    18867
Name: Call_cat, dtype: int64

在 [22] 中:

grouped = df2.groupby('Z1')['Call_cat'].value_counts(dropna=True, sort=False) 分组

输出[22]:

Z1    Call_cat
ZLZO  1.0         2961
      2.0           24
      3.0          476
      4.0         1221
ZZRE  1.0          307
      2.0            2
      3.0          152
      4.0          197
ZZMB  1.0          904
      3.0          198
      4.0          906

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以从两个分组列的所有值组合创建MultiIndex,并使用此多索引重新索引 groupby 结果。然后用零填充 NaN 值。

    import pandas as pd
    # example data
    df = pd.DataFrame({'a':list('xxxyyy'), 'b':[1,2,3,1,2,2]})
    #    a  b
    # 0  x  1
    # 1  x  2
    # 2  x  3
    # 3  y  1
    # 4  y  2
    # 5  y  2
    
    multi_index = pd.MultiIndex.from_product([df.a.unique(), df.b.unique()], 
                                             names=['a', 'b'])\
                               .sort_values()
    df.groupby(['a','b']).size().reindex(multi_index).fillna(0).astype(int)
    

    这会产生

    a  b
    x  1    1
       2    1
       3    1
    y  1    1
       2    2
       3    0
    

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 2020-11-20
      • 2015-10-15
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多