首页 > 解决方案 > 将交叉表数据框转换为单个(堆叠)

问题描述

假设我制作了以下交叉表:

foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
pd.crosstab(foo, bar)

这给出了:

col_0  d  e
row_0      
a      1  0
b      0  1

我想将上面转换为单个堆叠表,这样我得到:

  row_0  tot d  tot e
0     a      1      0
1     b      0      1

即列的标题de更改为tot dtot e现在row_0是一列。到目前为止,我通过将交叉表版本保存到 excel 中并手动施加更改并将其导入来做到这一点。但我确信应该有更有效的方法来做到这一点?

标签: pythonpandas

解决方案


DataFrame.add_prefixDataFrame.reset_index和最后一起使用DataFrame.rename_axis

df = pd.crosstab(foo, bar)
   
df = df.add_prefix('tot ').reset_index().rename_axis(None, axis=1) 
print (df)
  row_0  tot d  tot e
0     a      1      0
1     b      0      1

推荐阅读