如何使用Pandas生成带计数的列联表?(附示例数据)
我来帮你搞定用Pandas生成列联表的需求!先把你提供的原始数据整理成清晰的Markdown表格:
原始数据集
| index | used_x | clicked_in_x | used_y | clicked_in_y |
|---|---|---|---|---|
| 1 | True | False | True | True |
| 2 | False | False | True | False |
| 3 | True | True | False | False |
接下来直接上代码和解释,一步到位生成你想要的列联表:
步骤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_x | False | True | Total |
|---|---|---|---|
| False | 1 | 0 | 1 |
| True | 1 | 1 | 2 |
| Total | 2 | 1 | 3 |
如果需要针对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_y | False | True | Total |
|---|---|---|---|
| False | 1 | 0 | 1 |
| True | 1 | 1 | 2 |
| Total | 2 | 1 | 3 |
额外优化:生成百分比统计
如果想要更直观的百分比统计(而不是单纯频数),可以添加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_x | False | True | Total |
|---|---|---|---|
| False | 1.00 | 0.00 | 1.00 |
| True | 0.50 | 0.50 | 1.00 |
| Total | 0.67 | 0.33 | 1.00 |
内容的提问来源于stack exchange,提问作者fraxture
相关产品推荐
相关产品推荐

