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

如何使用Pandas将选举数据集重塑为选民与得票同列的单行宽表

宽表转换实现方案

你可以按以下步骤实现需求,首先修正原始数据中的拼写错误,再通过透视表完成行转列:

1. 预处理修正无效值

你提供的样例数据里tipo_de_voto字段存在拼写错误,先统一修正,也可以将空的党派标识替换为更易识别的名称:

import pandas as pd

# 修正投票类型拼写错误
electores['tipo_de_voto'] = electores['tipo_de_voto'].replace({
    'negarivo': 'negativo',
    'negartivo': 'negativo'
})
# 可选:将空的党派名称替换为otros,方便后续列名识别
electores['agrup'] = electores['agrup'].replace('', 'otros')

2. 生成宽表

用pivot_table透视表功能,按站点、票台、选民数作为固定行维度,将职位、党派、投票类型转为列,对得票数做聚合:

wide_result = pd.pivot_table(
    electores,
    # 行维度:每个票台对应唯一的站点、票台编号、选民数
    index=['estable', 'mesa', 'electores'],
    # 要展开为列的分类维度
    columns=['cargo', 'agrup', 'tipo_de_voto'],
    # 值字段:得票数
    values='cantidad',
    # 聚合规则:同分类得票数求和
    aggfunc='sum',
    # 无数据的项补0
    fill_value=0
).reset_index()

# 将多层列名合并为单层,用下划线连接,方便后续使用
wide_result.columns = [
    '_'.join(col).strip('_') if isinstance(col, tuple) else col 
    for col in wide_result.columns
]

输出效果说明

最终得到的wide_result每行对应单个票台的全量数据,列结构为:

  • 基础维度列:estable、mesa、electores
  • 得票统计列:如concejal_fdt_positivo(议员席位FDT党派正票)、concejal_otros_negativo(议员席位其他党派废票)、diputado_jxc_positivo(众议员席位JXC党派正票)等所有分类的得票数据

内容的提问来源于stack exchange,提问作者Facundo Javier Vargas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:36:00