我是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
答案 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