Pandas Category子组0计数

时间:2017-03-29 14:56:25

标签: python pandas

我是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]中:

分组= 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

1 个答案:

答案 0 :(得分:2)

您可以从两个分组列的所有值组合中创建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