跨多数据集匹配数据点:投票数据与政党符号映射合并方案咨询
解决方案:合并投票数据与政党对应关系
要解决同一符号在不同选区对应不同政党的匹配问题,核心是将两个宽格式数据集转换为长格式后关联,再按需整理。以下是基于Python pandas的实现步骤:
1. 加载数据集
先将两个数据集用pandas加载(可直接定义DataFrame,或从CSV/Excel读取):
import pandas as pd # 得票数据集(Dataset 1) data_votes = pd.DataFrame({ 'district': ['district1', 'district2', 'district3', 'district4'], 'umbrella': [25678, None, 543634, 12344], 'elephant': [21324, 514213, 324245, 324324], 'bicycle': [None, 2145341, 3523542, None] }) # 符号-政党对应数据集(Dataset 2) data_parties = pd.DataFrame({ 'district': ['district1', 'district2', 'district3', 'district4'], 'umbrella': ['United Party', None, 'Monster Raving Loony Party', 'United Party'], 'elephant': ['National Party', 'National Party', 'Green Party', 'Pirate Party'], 'bicycle': [None, 'Binface Party', 'Binface Party', None] })
2. 转换为长格式
将宽表转为长表,让每个符号成为单独行,确保能按「选区+符号」精准匹配:
# 处理得票数据长格式,过滤无得票的行 votes_long = data_votes.melt( id_vars='district', var_name='symbol', value_name='votes' ).dropna(subset=['votes']) # 处理政党对应数据长格式,过滤无政党的行 parties_long = data_parties.melt( id_vars='district', var_name='symbol', value_name='party' ).dropna(subset=['party'])
3. 合并数据集
按district和symbol双字段合并,确保每个选区的符号对应正确的政党与得票:
merged_data = pd.merge( votes_long, parties_long, on=['district', 'symbol'], how='inner' )
合并结果示例
合并后的长格式数据如下:
| district | symbol | votes | party |
|---|---|---|---|
| district1 | umbrella | 25678 | United Party |
| district1 | elephant | 21324 | National Party |
| district2 | elephant | 514213 | National Party |
| district2 | bicycle | 2145341 | Binface Party |
| district3 | umbrella | 543634 | Monster Raving Loony Party |
| district3 | elephant | 324245 | Green Party |
| district3 | bicycle | 3523542 | Binface Party |
| district4 | umbrella | 12344 | United Party |
| district4 | elephant | 324324 | Pirate Party |
如果需要转回宽格式(以政党为列展示得票),可使用pivot:
wide_merged = merged_data.pivot( index='district', columns='party', values='votes' ).fillna(0)
内容的提问来源于stack exchange,提问作者tayroc122
相关产品推荐
相关产品推荐

