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

如何计算多因子简单交叉表?及Pandas表交叉求和实现需求

如何用Pandas计算两个因子的交叉表

嘿,我来帮你搞定这个交叉表的需求!首先咱们先理清楚你的场景:你有两张带id和label的表格,想要把它们的标签做交叉统计,得到不同标签组合的结果对吧?

先明确你的数据情况

你给出的两张表是这样的:
表1(df1):

idlabel
12
20
31

表2(df2):

idlabel
11
21
30

还有你已经写好的初始化代码:

import pandas as pd

d = {'col1': [1, 2, 3], 'col2': [2, 0, 1]}
df1 = pd.DataFrame(data=d)
d = {'col1': [1, 2, 3], 'col2': [1, 1, 0]}
df2 = pd.DataFrame(data=d)

实现步骤

其实搞定这个很简单,分两步走就行:

1. 先把两张表按id合并

因为咱们需要把同一个id对应的两个标签配对起来,所以用pd.merge()把它们合并,给两个col2(也就是label)加个后缀区分开:

merged_df = pd.merge(df1, df2, on='col1', suffixes=('_df1', '_df2'))

合并后的结果会是这样的:

col1col2_df1col2_df2
121
201
310

2. 生成交叉表

用Pandas自带的pd.crosstab()函数直接统计两个标签的组合次数,这就是咱们要的交叉表啦:

cross_table = pd.crosstab(merged_df['col2_df1'], merged_df['col2_df2'])
print(cross_table)

运行后输出的结果就是:

col2_df2  0  1
col2_df1       
0          0  1
1          1  0
2          0  1

额外扩展:如果需要求和而非计数

要是你不是要统计组合出现的次数,而是要对某个数值字段做交叉求和,那可以给pd.crosstab()加两个参数:values指定要求和的列,aggfunc='sum'指定聚合方式。比如假设合并后的表有个value列:

# 示例:对value列交叉求和
cross_table_sum = pd.crosstab(merged_df['col2_df1'], merged_df['col2_df2'], 
                              values=merged_df['value'], aggfunc='sum')

小说明

你给出的目标表数值看起来和当前示例数据不太匹配,可能是示例笔误?不过上面的方法是Pandas生成交叉表的标准做法,完全可以满足你“两个因子交叉统计”的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:15