如何在不合并全部数据集的情况下使用df2的Index列?
问题与数据集
现有数据集
df1
| 国家 | 年份 | Dem |
|---|---|---|
| 土耳其 | 1993 | 152 |
| 西班牙 | 1993 | 223 |
| 西班牙 | 1994 | 166 |
| 美国 | 1993 | 123 |
df2(仅需使用其中的"Index"列)
| 国家 | 年份 | Index |
|---|---|---|
| 土耳其 | 1993 | 0 |
| 西班牙 | 1993 | 1 |
| 西班牙 | 1994 | 1 |
| 美国 | 1993 | 1 |
需求
如何在不合并全部数据集的情况下使用df2中的Index列?
解决方案
以下几种方法都不需要合并df2的全部列,仅提取需要的Index值关联到df1中:
方法1:构建映射字典快速匹配
先把df2的(国家,年份)作为键、Index作为值生成字典,再直接在df1中映射取值:
import pandas as pd # 假设df1和df2已加载完成 index_map = df2.set_index(['国家', '年份'])['Index'].to_dict() # 给df1添加Index列(也可以直接用这个字典做后续计算) df1['Index'] = df1.apply(lambda row: index_map.get((row['国家'], row['年份'])), axis=1)
方法2:仅合并所需列的轻量merge
用merge但只传入df2的必要列,避免全量合并:
# 只选取df2中关联需要的列,和df1合并 df1_with_index = df1.merge(df2[['国家', '年份', 'Index']], on=['国家', '年份'], how='left')
方法3:按条件查询提取(适合小数据集)
如果数据量不大,直接通过条件定位df2中的对应Index值:
df1['Index'] = df1.apply( lambda row: df2.loc[(df2['国家'] == row['国家']) & (df2['年份'] == row['年份']), 'Index'].iloc[0], axis=1 )
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

