- 通过添加缺失值填充确保所有行和列具有相同的标签,然后使用 fillna 方法转换为方形。这种方法适用于标签是完全一致的情况。
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'foo', 'bar', 'bar', 'foo', 'foo', 'baz', 'baz'],
'B': ['one', 'one', 'one', 'two', 'two', 'two', 'one', 'two']})
ct = pd.crosstab(df['A'], df['B'])
确保所有行和列具有相同的标签
labels = ct.index.union(ct.columns)
ct = ct.reindex(labels, columns=labels, fill_value=pd.np.nan)
将缺失值填充为 0,转换为方形矩阵
ct = ct.fillna(0)
ct = ct.iloc[:ct.shape[0], :ct.shape[0]]
- 使用 numpy.pad 函数在原始矩阵的边界上添加额外的行和列,使得矩阵变为方形矩阵。这种方法适用于标签存在一定差异的情况。
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['foo', 'foo', 'bar', 'bar', 'foo', 'foo', 'baz', 'baz'],
'B': ['one', 'one', 'one', 'two', 'two', 'two', 'one', 'two']})
ct = pd.crosstab(df['A'], df['B'])
获取行和列的数量
nrows, ncols = ct.shape
如果行和列数量不等,则在较小的维度上添加额外的行和列
if nrows != ncols:
size_diff = abs(nrows - ncols)
pad_width = ((0, size_diff), (0, size_diff))
ct =