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

如何用Python/Pandas从汇总人口普查数据生成个体级模拟数据集?

可以用Pandas实现这个需求,以下是具体步骤和代码示例

核心思路

将各分类的计数转换为对应重复次数的列表,再组合成包含Person、Gender、Transport、Marriage_Status字段的结构化数据集,总条数刚好匹配1000条。


情况1:汇总表为两列格式(Category + Count)

假设你的Excel汇总表结构如下(Sheet1):

CategoryCount
Male500
Female500
Car200
Bike200
Walk600
Married450
Not Married550

对应的实现代码:

import pandas as pd
import numpy as np

# 读取Excel汇总数据
df_summary = pd.read_excel('census_summary.xlsx', sheet_name='Sheet1')

# 拆分不同维度的分类数据
gender_groups = df_summary[df_summary['Category'].isin(['Male', 'Female'])]
transport_groups = df_summary[df_summary['Category'].isin(['Car', 'Bike', 'Walk'])]
marriage_groups = df_summary[df_summary['Category'].isin(['Married', 'Not Married'])]

# 生成各字段的重复值列表
gender_list = []
for _, row in gender_groups.iterrows():
    gender_list.extend([row['Category']] * row['Count'])

transport_list = []
for _, row in transport_groups.iterrows():
    transport_list.extend([row['Category']] * row['Count'])

marriage_list = []
for _, row in marriage_groups.iterrows():
    marriage_list.extend([row['Category']] * row['Count'])

# 随机打乱列表(可选,避免数据顺序固化,更贴近真实抽样)
np.random.shuffle(gender_list)
np.random.shuffle(transport_list)
np.random.shuffle(marriage_list)

# 构建最终的单条记录数据集
individual_records = pd.DataFrame({
    'Person': range(1, 1001),  # 生成1-1000的受访者唯一ID
    'Gender': gender_list,
    'Transport': transport_list,
    'Marriage_Status': marriage_list
})

# 保存结果到新Excel文件
individual_records.to_excel('individual_census_records.xlsx', index=False)

情况2:汇总表为单行列名格式

如果你的Excel汇总表是单一行,列名为分类名称,值为对应计数:

MaleFemaleCarBikeWalkMarriedNot Married
500500200200600450550

可以简化代码:

import pandas as pd
import numpy as np

df_summary = pd.read_excel('census_summary.xlsx', sheet_name='Sheet1')

# 直接从列名和对应值生成重复列表
gender_list = ['Male'] * df_summary['Male'].iloc[0] + ['Female'] * df_summary['Female'].iloc[0]
transport_list = ['Car'] * df_summary['Car'].iloc[0] + ['Bike'] * df_summary['Bike'].iloc[0] + ['Walk'] * df_summary['Walk'].iloc[0]
marriage_list = ['Married'] * df_summary['Married'].iloc[0] + ['Not Married'] * df_summary['Not Married'].iloc[0]

# 随机打乱(可选)
np.random.shuffle(gender_list)
np.random.shuffle(transport_list)
np.random.shuffle(marriage_list)

# 构建数据集并保存
individual_records = pd.DataFrame({
    'Person': range(1, 1001),
    'Gender': gender_list,
    'Transport': transport_list,
    'Marriage_Status': marriage_list
})

individual_records.to_excel('individual_census_records.xlsx', index=False)

关键说明

  • 不需要额外工具包,仅用Pandas和Numpy(Numpy仅用于随机打乱,可选)即可完成
  • 随机打乱步骤可根据需求省略,如果需要保持分类的原始顺序(比如前500条都是Male)可以去掉这部分
  • 最终生成的Person字段为1到1000的连续整数,作为每条记录的唯一标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:43