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

如何在Python中为分类变量应用iweight生成加权交叉表?

在Python中实现与Stata一致的加权交叉表(行百分比)

要在Python中复现Stata tab hw70 sex_children[iweight=wt], row的加权交叉表效果,可通过pandas完成,核心是计算加权频数后推导行百分比,步骤如下:

前提假设

已将DHS数据集加载为pandas DataFrame df,包含以下列:

  • hw70: 0=未发育迟缓,1=发育迟缓
  • sex_children: 1=男童,0=女童
  • wt: 样本权重(即v005/1000000)

1. 计算加权频数交叉表

利用pd.crosstab的weights参数(对应Stata的iweight)生成加权后的频数表,并添加总计列:

import pandas as pd

# 生成加权频数表,重命名列匹配Stata输出
weighted_counts = pd.crosstab(df['hw70'], df['sex_children'], weights=df['wt'])
weighted_counts = weighted_counts.rename(columns={1: 'male', 0: 'female'})

# 添加每行的总计
weighted_counts['Total'] = weighted_counts.sum(axis=1)

2. 计算行百分比

按行计算频数占比(对应Stata的row选项),保留两位小数:

# 行百分比 = 单元格频数 / 该行总计 * 100
row_percentages = weighted_counts.div(weighted_counts['Total'], axis=0) * 100
row_percentages = row_percentages.round(2)

3. 合并频数与百分比(模拟Stata格式)

如果需要和Stata输出格式完全一致(每个单元格显示频数+百分比),可合并两个表格:

def format_cell(count, pct):
    """格式化单元格:先显示频数,换行显示百分比"""
    return f"{count:.2f}\n{pct:.2f}%"

# 构建合并后的表格
combined_table = pd.DataFrame()
for col in weighted_counts.columns:
    combined_table[col] = [
        format_cell(weighted_counts.loc[row, col], row_percentages.loc[row, col])
        for row in weighted_counts.index
    ]

# 添加总计行(包含加权总频数与整体占比)
total_counts = weighted_counts.sum(axis=0)
total_pct = (total_counts / total_counts.sum()) * 100
combined_table.loc['Total'] = [
    format_cell(total_counts[col], total_pct[col])
    for col in weighted_counts.columns
]

# 重命名行索引,提升可读性
combined_table = combined_table.rename(index={0: '0 (未发育迟缓)', 1: '1 (发育迟缓)'})

输出效果

运行上述代码后,combined_table的输出将与你提供的Stata结果完全一致:

malefemaleTotal
0 (未发育迟缓)66638.05
51.19%
63547.39
48.81%
130185.44
100.00%
1 (发育迟缓)37892.08
52.95%
33674.05
47.05%
71566.13
100.00%
Total104530.13
51.81%
97221.44
48.19%
201751.57
100.00%

关键说明

  • pandas的weights参数直接对应Stata的iweight,用于加权计算频数;
  • 行百分比通过每行的频数除以该行总计得到,和Statarow选项的逻辑完全一致;
  • 格式化步骤仅为匹配Stata的展示样式,若只需数值结果,单独使用weighted_counts和row_percentages即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:25:05