如何基于指定列列表生成与CLASS关联的独立交叉表
批量生成单列与CLASS的独立交叉表
问题分析
你当前代码将多列打包为列表传入pd.crosstab,导致生成合并的多维度交叉表。要批量生成单个列与CLASS的独立交叉表,只需**遍历指定列名,逐个调用pd.crosstab**即可,无需重复编写代码。
示例代码
假设你的DataFrame已加载为g,可按以下方式实现:
import pandas as pd # 示例数据(若未加载数据可直接使用) data = { 'GND': ['F', 'M', 'M', 'F', 'M'], 'BRD': ['A', 'D', 'S', 'S', 'S'], 'ERS': ['AB', 'CB', 'AV', 'AV', 'CB'], 'CLASS': ['ON', 'ON', 'ON', 'OFF', 'ON'] } g = pd.DataFrame(data) # 指定需要生成交叉表的列名列表 cols_to_cross = ['GND', 'BRD', 'ERS'] # 批量生成并存储交叉表,用字典保存便于后续调用 cross_tables = {} for col in cols_to_cross: cross_tables[col] = pd.crosstab(g[col], g['CLASS']) # 逐个输出独立交叉表 for col, table in cross_tables.items(): print(f"--- {col} 与 CLASS 的交叉表 ---") print(table) print()
输出结果
运行后将得到三个独立的交叉表:
--- GND 与 CLASS 的交叉表 ---
CLASS OFF ON
GND
F 1 1
M 0 3--- BRD 与 CLASS 的交叉表 ---
CLASS OFF ON
BRD
A 0 1
D 0 1
S 1 2--- ERS 与 CLASS 的交叉表 ---
CLASS OFF ON
ERS
AB 0 1
AV 1 1
CB 0 2
说明
- 使用列名字符串列表替代原代码中的Series列表,遍历过程可直接通过列名索引DataFrame的对应列
- 用字典
cross_tables存储每个交叉表,键为列名、值为对应交叉表DataFrame,方便后续单独调用(例如cross_tables['GND']即可获取GND的交叉表) - 遍历过程中可直接打印结果,也可将结果保存至文件或用于后续分析
内容的提问来源于stack exchange,提问作者zuma boy
相关产品推荐
相关产品推荐

