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

如何使用Pandas生成带计数的列联表?(附示例数据)

我来帮你搞定用Pandas生成列联表的需求!先把你提供的原始数据整理成清晰的Markdown表格:

原始数据集

indexused_xclicked_in_xused_yclicked_in_y
1TrueFalseTrueTrue
2FalseFalseTrueFalse
3TrueTrueFalseFalse

接下来直接上代码和解释,一步到位生成你想要的列联表:

步骤1:导入Pandas并构建DataFrame

首先把原始数据转换成Pandas的DataFrame格式:

import pandas as pd

# 把你的数据转换成字典,再生成DataFrame
data = {
    'index': [1, 2, 3],
    'used_x': [True, False, True],
    'clicked_in_x': [False, False, True],
    'used_y': [True, True, False],
    'clicked_in_y': [True, False, False]
}
df = pd.DataFrame(data)

步骤2:生成列联表

使用pd.crosstab()函数就能快速生成交叉频数表,这个函数专门用来统计两个(或多个)变量的交叉分布情况。

比如针对used_x和clicked_in_x生成带总计行/列的列联表:

# 生成used_x与clicked_in_x的列联表,margins=True添加总计
cross_tab_x = pd.crosstab(df['used_x'], df['clicked_in_x'], margins=True, margins_name='Total')
print(cross_tab_x)

运行后输出的列联表格式如下:

used_xFalseTrueTotal
False101
True112
Total213

如果需要针对used_y和clicked_in_y生成列联表,只需要替换对应的列名即可:

cross_tab_y = pd.crosstab(df['used_y'], df['clicked_in_y'], margins=True, margins_name='Total')
print(cross_tab_y)

输出结果:

used_yFalseTrueTotal
False101
True112
Total213

额外优化:生成百分比统计

如果想要更直观的百分比统计(而不是单纯频数),可以添加normalize参数:

  • normalize='index':按行计算百分比
  • normalize='columns':按列计算百分比
  • normalize=True:计算整体百分比

示例代码:

# 按行计算百分比的列联表,保留两位小数
cross_tab_x_pct = pd.crosstab(df['used_x'], df['clicked_in_x'], margins=True, margins_name='Total', normalize='index')
print(cross_tab_x_pct.round(2))

输出结果:

used_xFalseTrueTotal
False1.000.001.00
True0.500.501.00
Total0.670.331.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:25