选举数据大规模整理需求:将分组行转换为列
将选举数据从长格式转换为宽格式(按选区聚合)
完全可以实现把每个选区(precinct)转为单行的宽格式数据,以下是两种常用工具的实现方法:
方法一:使用Excel(适合非编程用户)
- 选中包含表头的全部数据区域,点击「数据」选项卡中的「从表格/范围」(Excel 365/2021版本可用,旧版本可使用「数据透视表」功能)。
- 在Power Query编辑器中,选中
precinct列,切换到「转换」选项卡,点击「透视列」。 - 在弹出的设置窗口中:
- 「值列」选择
cand_tot_votes - 「高级选项」选择「不要聚合」(因为每个选区+党派的组合是唯一的,无需聚合)
- 「值列」选择
- 此时生成的列名是
GOVERNOR DEM这类格式,你可以手动修改表头为Gov Dem、Gov Rep等自定义名称。 - 点击「关闭并上载」,即可得到每个选区一行的宽格式数据。
方法二:使用Python Pandas(适合批量/自动化处理)
如果需要处理大量数据或自动化流程,用Pandas可以快速完成转换,代码示例如下:
import pandas as pd # 读取原始数据(替换为你的数据来源,比如csv、Excel文件) df = pd.read_csv("oklahoma_election_data.csv") # 生成自定义列名:将race_description缩写后与党派组合,比如"GOVERNOR" → "Gov" df['column_name'] = df['race_description'].str[:3].str.upper() + ' ' + df['cand_party'] # 透视转换:以precinct为行,自定义列名为列,投票数为值 wide_format_df = df.pivot( index='precinct', columns='column_name', values='cand_tot_votes' ).reset_index() # 移除列索引的名称,让表头更简洁 wide_format_df.columns.name = None # 可选:将空值(无该党派投票的选区)填充为0 wide_format_df = wide_format_df.fillna(0).astype(int) # 输出结果 print(wide_format_df)
转换后的示例结果:
precinct Gov DEM Gov IND Gov LIB Gov REP 0 10001 106 5 7 118 1 10002 84 9 3 151 2 10003 36 2 0 0
内容的提问来源于stack exchange,提问作者Dylan Billings
相关产品推荐
相关产品推荐

