Pandas 如何确保所有行/列都显示为交叉表?
我正在计算一个简单的交叉表,用于转换矩阵,如下所示:Pandas 如何确保所有行/列都显示为交叉表?,pandas,Pandas,我正在计算一个简单的交叉表,用于转换矩阵,如下所示: test_df=pd.DataFrame({'from':['A','A','B','C'],'to':['A','B','B',None]}, 列=[“从”、“到”]) pd.交叉表(test_-df['from'],test_-df['to'],dropna=False) 它生成以下矩阵: A | B --------- A 1 | 1 --------- B 0 | 1 我希望它包括所有转换,即使它们为0,如下所示:
test_df=pd.DataFrame({'from':['A','A','B','C'],'to':['A','B','B',None]},
列=[“从”、“到”])
pd.交叉表(test_-df['from'],test_-df['to'],dropna=False)
它生成以下矩阵:
A | B
---------
A 1 | 1
---------
B 0 | 1
我希望它包括所有转换,即使它们为0,如下所示:
A | B | C
-------------
A 1 | 1 | 0
-------------
B 0 | 1 | 0
-------------
C 0 | 0 | 0
是否有一些设置我错过了这样做?我尝试检查选项,但找不到任何内容。最后使用:
i = test_df[['from','to']].stack().unique()
new_df = (pd.crosstab(test_df['from'], test_df['to'],dropna = False)
.reindex(index = i,columns=i,fill_value =0))
print(new_df)
to A B C
from
A 1 1 0
B 0 1 0
C 0 0 0
另一种方法:
(test_df.pivot_table(index = 'from',columns = 'to',aggfunc = 'size',fill_value = 0)
.reindex(index = i,columns = i,fill_value = 0))