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

如何匹配双边数据集的国家名并关联v2x_regime完成合并?

合并双边数据集与单国属性数据

问题描述

需要将包含单国年度属性的df1,与包含双边关系的df2合并,把df1中的v2x_regime字段分别关联到df2的报告国和伙伴国,最终生成包含报告国、报告国的v2x_regime、伙伴国、伙伴国的v2x_regime及年份的数据集。

原始数据

df1(单国年度属性)

country_name(国家名称)Year(年份)v2x_regime
土耳其(Turkiye)19930
土耳其(Turkiye)19940
土耳其(Turkiye)19951
意大利19931
西班牙19930
德国19931
俄罗斯19930
俄罗斯19950
美国(USA)19931

df2(双边关系数据)

Reporting Country(报告国)Partner Country(伙伴国)Year(年份)FDI_outward
土耳其(Turkiye)意大利1993132
土耳其(Turkiye)意大利1994392
意大利土耳其(Turkiye)1993913
乌克兰(Ukrain)德国1993512
德国俄罗斯1993714
俄罗斯德国1993451
俄罗斯德国1995282
美国(USA)英国(UK)19931241

解决方案(Python Pandas)

核心思路是两次左连接:先将df2与df1按「报告国+年份」匹配,得到报告国的v2x_regime;再将结果与df1按「伙伴国+年份」匹配,得到伙伴国的v2x_regime。

代码实现

import pandas as pd

# 构造df1数据
df1 = pd.DataFrame({
    'country_name': ['土耳其(Turkiye)', '土耳其(Turkiye)', '土耳其(Turkiye)',
                     '意大利', '西班牙', '德国', '俄罗斯', '俄罗斯', '美国(USA)'],
    'Year': [1993, 1994, 1995, 1993, 1993, 1993, 1993, 1995, 1993],
    'v2x_regime': [0, 0, 1, 1, 0, 1, 0, 0, 1]
})

# 构造df2数据
df2 = pd.DataFrame({
    'Reporting Country(报告国)': ['土耳其(Turkiye)', '土耳其(Turkiye)', '意大利',
                                 '乌克兰(Ukrain)', '德国', '俄罗斯', '俄罗斯', '美国(USA)'],
    'Partner Country(伙伴国)': ['意大利', '意大利', '土耳其(Turkiye)', '德国',
                               '俄罗斯', '德国', '德国', '英国(UK)'],
    'Year': [1993, 1994, 1993, 1993, 1993, 1993, 1995, 1993],
    'FDI_outward': [132, 392, 913, 512, 714, 451, 282, 1241]
})

# 第一次合并:匹配报告国的v2x_regime
merged = pd.merge(df2, df1,
                  left_on=['Reporting Country(报告国)', 'Year'],
                  right_on=['country_name', 'Year'],
                  how='left').rename(columns={'v2x_regime': 'v2x_regime_reporting'})

# 第二次合并:匹配伙伴国的v2x_regime
final_df = pd.merge(merged, df1,
                    left_on=['Partner Country(伙伴国)', 'Year'],
                    right_on=['country_name', 'Year'],
                    how='left').rename(columns={'v2x_regime': 'v2x_regime_partner'})

# 筛选需要的列并整理顺序
final_df = final_df[[
    'Reporting Country(报告国)', 'v2x_regime_reporting',
    'Partner Country(伙伴国)', 'v2x_regime_partner',
    'Year', 'FDI_outward'
]]

# 查看结果
print(final_df)

最终输出结果

Reporting Country(报告国)v2x_regime_reportingPartner Country(伙伴国)v2x_regime_partnerYearFDI_outward
土耳其(Turkiye)0.0意大利1.01993132
土耳其(Turkiye)0.0意大利NaN1994392
意大利1.0土耳其(Turkiye)0.01993913
乌克兰(Ukrain)NaN德国1.01993512
德国1.0俄罗斯0.01993714
俄罗斯0.0德国1.01993451
俄罗斯0.0德国NaN1995282
美国(USA)1.0英国(UK)NaN19931241

说明

  • 结果中的NaN表示对应国家-年份组合在df1中没有数据(比如1994年的意大利、1995年的德国、乌克兰、英国),可根据需求用fillna()填充默认值(如final_df.fillna(0, inplace=True))。
  • 确保国家名称的格式完全一致(比如「美国(USA)」和「美国(US)」会被视为不同国家),若存在名称不一致的情况,需先统一国家名称格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:45:40