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

如何使用Pandas基于多列站点ID合并两个DataFrame?

Pandas 数据合并问题解决方法

你需要分两次将df2与df1合并,分别匹配sites1和sites2,并对合并后的列重命名,才能得到预期的结果表。

步骤说明

  • 第一次合并:将df2和df1按sites1与sites匹配,提取sites1对应的nb samples,并重命名列
  • 第二次合并:基于第一次的结果,再与df1按sites2与sites匹配,提取sites2对应的nb samples,重命名列
  • 清理多余的中间列

完整代码示例

import pandas as pd

# 示例数据集(替换成你的真实数据即可)
df1 = pd.DataFrame({
    'sites': ['A', 'B', 'C'],
    'nb samples': [10, 20, 30]
})

df2 = pd.DataFrame({
    'sites1': ['A', 'B', 'A'],
    'sites2': ['B', 'C', 'C'],
    'nb links': [5, 8, 6]
})

# 第一次合并:匹配sites1,重命名对应列
merged_step1 = pd.merge(df2, df1, left_on='sites1', right_on='sites', how='left')
merged_step1 = merged_step1.rename(columns={'nb samples': 'nb samples sites1'}).drop('sites', axis=1)

# 第二次合并:匹配sites2,重命名对应列
final_result = pd.merge(merged_step1, df1, left_on='sites2', right_on='sites', how='left')
final_result = final_result.rename(columns={'nb samples': 'nb samples sites2'}).drop('sites', axis=1)

print(final_result)

输出结果

sites1 sites2  nb links  nb samples sites1  nb samples sites2
0      A      B         5                10                20
1      B      C         8                20                30
2      A      C         6                10                30

说明:how='left'参数确保保留df2中的所有行,若只需要保留df1中存在匹配项的行,可以将其改为how='inner'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:33:49