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

Pandas如何基于列表元素匹配合并两个DataFrame数据框

Pandas两个DataFrame按列表元素匹配合并实现方案

需求说明

现有两个DataFrame:

  • df1包含分组标识Groups、数值列Value1/Value2、以及存储sp列表的List_sp列
  • df2包含分组标识Groups、单条sp记录列sp
    需要将df1的数值匹配到df2中对应sp的行,匹配规则为:df2的sp值存在于df1对应分组的List_sp列表中。

前置准备:构造测试数据

你提供的字典标注存在错位,修正后构造正确的测试数据如下:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'Groups': ['G1', 'G1', 'G2', 'G2'],
    'Value1': [2, 4, 6, 8],
    'Value2': [3, 5, 7, 9],
    'List_sp': [
        ['Segment_1_1-300_+__Sp1', 'Segment_2_301-400_-__Sp2'],
        ['Segment_3_400-500_+__Sp3', 'Segment_2_600-700_+__Sp4'],
        ['Segment_12_800-900_-__Sp1'],
        ['Segment_1_400-500_-__Sp3', 'Segment_7_600-900_+__Sp1', 'Segment_15_1000-1900_-__Sp1']
    ]
})

# 构造df2,你提供的标注为"df1字典"的内容实际对应df2的结构
df2 = pd.DataFrame({
    'Groups': {0: 'G1', 1: 'G1', 2: 'G1', 3: 'G1', 4: 'G2', 5: 'G2', 6: 'G2', 7: 'G2'}, 
    'sp': {0: 'Segment_1_1-300_+__Sp1', 1: 'Segment_2_301-400_-__Sp2', 2: 'Segment_3_400-500_+__Sp3', 3: 'Segment_2_600-700_+__Sp4', 4: 'Segment_12_800-900_-__Sp1', 5: 'Segment_1_400-500_-__Sp3', 6: 'Segment_7_600-900_+__Sp1', 7: 'Segment_15_1000-1900_-__Sp1'}
})

实现逻辑

  1. 把df1的List_sp列展开,让列表中的每个sp单独成为一行
  2. 用展开后的df1和df2,按Groups和sp字段匹配合并即可得到目标结果

完整实现代码

# 展开df1的List_sp列,一行对应一个sp
df1_exploded = df1.explode('List_sp', ignore_index=True)

# 按分组和sp匹配合并两个表
result = pd.merge(
    df2,
    df1_exploded,
    left_on=['Groups', 'sp'],
    right_on=['Groups', 'List_sp'],
    how='left'
)

# 调整列顺序为预期输出格式
result = result[['Groups', 'sp', 'Value1', 'Value2', 'List_sp']]

# 验证结果
print(result)

运行代码得到的输出和你给出的预期结果完全一致,可直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:05