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

如何匹配两个DataFrame的name列并合并对应数据列

问题:合并DataFrame中匹配name列的指定列内容

需求说明:对比两个DataFrame(df1和df2),当两者name列的值相等时,将df1中的0、1两列合并到df2中,保留df2原有所有行。

数据示例

mylist数据

0       1
    [1,2]   [2,3]
    [1,5]   [2,6]
    [1,6]   [2,4]
    [1,1]   [2,5]
    [1,3]   [2,8]

mylist[0] = [[1,2],[2,3]]
mylist[1] = [[1,5],[2,6]]

df1数据

df1:
     name    0     1
0    a     [1,2]   [2,3]
1    y     [1,5]   [2,6]
2    c     [1,6]   [2,4]
3    x     [1,10]  [2,5]
4    e     [1,3]   [2,8]

df2数据

df2:
  name    id     
0    a      abcd   
1    b      efgh
2    c      ijkl   
3    d      mnop   
4    e      qrs

期望输出df3

df3:
       name      id     0        1
    0    a      abcd   [1,2]   [2,3]
    1    b      efgh
    2    c      ijkl   [1,6]   [2,4]
    3    d      mnop   
    4    e      qrs    [1,3]   [2,8]

解决方案

使用pandas的merge方法,以name列为连接键,采用左连接(how='left')保留df2的所有行,同时匹配df1中name相同的0、1列数据。

代码实现

import pandas as pd

# 构造示例df1
df1 = pd.DataFrame({
    'name': ['a', 'y', 'c', 'x', 'e'],
    '0': [[1,2], [1,5], [1,6], [1,10], [1,3]],
    '1': [[2,3], [2,6], [2,4], [2,5], [2,8]]
})

# 构造示例df2
df2 = pd.DataFrame({
    'name': ['a', 'b', 'c', 'd', 'e'],
    'id': ['abcd', 'efgh', 'ijkl', 'mnop', 'qrs']
})

# 执行左连接,仅合并df1的0、1列
df3 = df2.merge(df1[['name', '0', '1']], on='name', how='left')

# 查看结果
print(df3)

执行上述代码后,即可得到符合预期的df3,未匹配到的行(如name为b、d的行)中0、1列会显示为NaN,与期望输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:40:27