pandas 交叉表:包括所有级别

问题描述 投票:0回答:1

来自 pd.crosstab 的 pandas 文档:

“任何包含类别数据的输入都会将其类别的所有包含在交叉表中,即使实际数据不包含特定类别的任何实例。”

那么我在下面的代码片段中实际上做错了什么(最终输出不包含所有级别)

from pandas.api.types import CategoricalDtype as CD
ctype = CD(categories=["a","b","c"])
d_cat = pd.DataFrame({"x": ["a","a","a"], "y": ["b","a","b"]}, dtype=ctype)
d_cat["x"].dtype  # category
d_cat["x"].value_counts() # this properly includes all the levels - even unused
pd.crosstab(index=d_cat["x"], columns=d_cat["y"])
#y  a  b
#x
#a  1  2
python pandas pivot-table
1个回答
0
投票

您应该按照

dropna=False
 文档中所述使用 
crosstab
(请参阅示例):

pd.crosstab(index=d_cat["x"], columns=d_cat["y"], dropna=False)

输出:

y  a  b  c
x         
a  1  2  0
b  0  0  0
c  0  0  0
© www.soinside.com 2019 - 2024. All rights reserved.