Pandas如何循环计算DataFrame所有列两两组合的crosstab交叉表
实现DataFrame所有列两两组合生成交叉表的方案
要实现自动遍历所有列的两两组合生成交叉表,你可以借助itertools.combinations生成无重复的列对,再循环调用pd.crosstab即可,具体实现如下:
完整代码示例
首先导入依赖库:
import pandas as pd from itertools import combinations
然后生成所有两列的唯一组合并批量计算交叉表:
# 存储所有交叉表的字典,key为列名元组 (列1, 列2) crosstab_result = {} # 生成所有不重复的两列组合,不会出现(Var2,Var1)这种重复对 for col1, col2 in combinations(df.columns, 2): # 计算交叉表,默认会排除空值,如果需要保留空值可添加dropna=False参数 cross_tab = pd.crosstab(df[col1], df[col2]) # 存入结果字典方便后续调用 crosstab_result[(col1, col2)] = cross_tab # 需要直接打印结果可启用下面的代码 # print(f"===== {col1} 和 {col2} 的交叉表 =====") # print(cross_tab) # print("\n")
常用扩展操作
- 如果需要生成有序的两两组合(即同时保留
(Var1,Var2)和(Var2,Var1)两种交叉表),可以把combinations替换为itertools.product,并添加过滤条件排除两列相同的情况:from itertools import product for col1, col2 in product(df.columns, repeat=2): if col1 == col2: continue # 后续计算交叉表逻辑和上面一致 - 如果需要把所有交叉表导出到同一个Excel文件,每个交叉表占一个工作表:
with pd.ExcelWriter("所有交叉表结果.xlsx") as writer: for (col1, col2), tab in crosstab_result.items(): # 工作表名不能超过31字符,这里做截断处理 sheet_name = f"{col1}_{col2}"[:31] tab.to_excel(writer, sheet_name=sheet_name)
内容的提问来源于stack exchange,提问作者Jamesk112
相关产品推荐
相关产品推荐

