You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Pandas交叉表并保留相同二元列?保留分类变量分组

解决方案:保留分组标识的交叉表堆叠

问题分析

你当前用pd.concat([a,b])合并交叉表时,丢失了GenderDSC和Race的分组标识,导致无法区分堆叠后的行属于性别还是种族分类。要解决这个问题,需要给每个交叉表的索引添加层级标签,或者先重构数据集再生成统一的交叉表。

方法一:给交叉表添加多层索引后合并

先分别为两个交叉表的索引添加上层分组标签,再合并:

import pandas as pd

df = pd.DataFrame({'GenderDSC':['Male','Female','Female','Male','Male','Male'],
             'Goal':[0,1,0,1,0,0],
             'Race':['African-American','White','White','Asian','Asian','White']})

# 生成性别交叉表,添加上层索引"GenderDSC"
a = pd.crosstab(df['GenderDSC'], df['Goal'])
a.index = pd.MultiIndex.from_product([['GenderDSC'], a.index], names=['Category', 'Value'])

# 生成种族交叉表,添加上层索引"Race"
b = pd.crosstab(df['Race'], df['Goal'])
b.index = pd.MultiIndex.from_product([['Race'], b.index], names=['Category', 'Value'])

# 合并两个交叉表
result = pd.concat([a, b])
print(result)

输出结果会清晰保留分组标识:

Goal                     0  1
Category    Value            
GenderDSC   Male         3  1
            Female       1  1
Race        African-American  1  0
            White        2  1
            Asian        1  1

方法二:重构数据集后生成统一交叉表

先把性别和种族数据整合成同一格式的长表,再一次性生成带分组标识的交叉表,这种方法更简洁且易于扩展:

import pandas as pd

df = pd.DataFrame({'GenderDSC':['Male','Female','Female','Male','Male','Male'],
             'Goal':[0,1,0,1,0,0],
             'Race':['African-American','White','White','Asian','Asian','White']})

# 重构数据集:分别提取性别和种族数据,添加分类标签
gender_df = df.assign(Category='GenderDSC').rename(columns={'GenderDSC': 'Value'})
race_df = df.assign(Category='Race').rename(columns={'Race': 'Value'})
combined_df = pd.concat([gender_df, race_df])

# 生成带分组标识的交叉表
result = pd.crosstab([combined_df['Category'], combined_df['Value']], combined_df['Goal'])
print(result)

此方法与方法一输出结果完全一致,新增其他分类变量时只需重复类似的重构步骤即可。

原方法失效原因

原代码中pd.concat([a,b])仅简单堆叠行,但两个交叉表的索引仅包含各自的分类值(如Male、White),没有绑定所属的分组类型,合并后自然丢失了分组信息。通过添加多层索引或重构数据集,我们为每个行值明确标注了所属分类,从而完整保留分组标识。

内容的提问来源于stack exchange,提问作者Gabe Verzino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:05:25