如何匹配两个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
相关产品推荐
相关产品推荐

