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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:06:03