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

如何使用Pandas实现DataFrames间的多对多关联查询?

如何用Pandas实现多对多数据合并?

当然可以实现!这其实就是Pandas里非常常见的**多对多合并(many-to-many merge)**场景,刚好pd.merge()就能直接搞定,我来一步步给你讲清楚。

首先,先还原你的两个DataFrame方便测试:

import pandas as pd

# 模拟server_list DataFrame
server_list = pd.DataFrame({
    'Server': ['UK1010', 'UK1010', 'UK1010', 'UK1011'],
    'Platform': ['Unix', 'Unix', 'Unix', 'Windows'],
    'Package': ['Java', 'Java', 'Java', 'Java'],
    'Version': ['1.1', '4.1', '5.0', '1.2']
})

# 模拟applications DataFrame
applications = pd.DataFrame({
    'Server': ['UK1010', 'UK1010', 'UK1010'],
    'Department': ['Accounting', 'Audit', 'CustomerForm'],
    'Application': ['TaxMe', 'TaxCheck', 'FillIt'],
    'Environment': ['PROD', 'PROD', 'PROD']
})

接下来只需要一行代码就能完成你想要的合并:

merged_df = pd.merge(server_list, applications, on='Server')

运行后你得到的merged_df就是你期望的格式:

ServerPlatformPackageVersionDepartmentApplicationEnvironment
0UK1010UnixJava1.1AccountingTaxMePROD
1UK1010UnixJava1.1AuditTaxCheckPROD
2UK1010UnixJava1.1CustomerFormFillItPROD
3UK1010UnixJava4.1AccountingTaxMePROD
4UK1010UnixJava4.1AuditTaxCheckPROD
5UK1010UnixJava4.1CustomerFormFillItPROD
6UK1010UnixJava5.0AccountingTaxMePROD
7UK1010UnixJava5.0AuditTaxCheckPROD
8UK1010UnixJava5.0CustomerFormFillItPROD

为什么这能生效?

当你用pd.merge()基于Server列合并两个DataFrame时:

  • 如果server_list里某个Server有N条记录,applications里同一个Server有M条记录,Pandas会自动生成N*M条组合记录,完美实现你要的多对多关联。
  • 默认的how='inner'参数会只保留两边都存在的Server记录,刚好符合你的需求;如果需要保留所有Server(哪怕某一边没有对应记录),可以改成how='outer'。

补充小提示

如果你对pd.merge()的文档还有困惑,可以重点关注这几个核心参数:

  • on:指定用来关联的共同列名(必须两边都有)
  • how:合并方式,可选inner(内连接,默认)、outer(外连接)、left(左连接)、right(右连接)
  • left_on/right_on:如果两边用来关联的列名不一样,就用这两个参数分别指定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:43