如何比较两个熊猫数据框并返回将它们相互映射的索引?

Posted

技术标签:

【中文标题】如何比较两个熊猫数据框并返回将它们相互映射的索引?【英文标题】:How can I compare two pandas dataframes and return an index mapping them to each other? 【发布时间】:2021-02-11 04:22:49 【问题描述】:

我有两个数据框,df1 和 df2。这些数据框在第 3-10 列中有一些重叠的数据,但我知道前两列不匹配。如何遍历这两个数据帧并创建具有 df1.col1、df1.col2、df2.col1、df2.col2 架构的第三个数据帧?

在 SQL 中,我将使用第 3 到第 10 列作为键进行连接,然后 select 语句将只返回每个表的前两列 - 但我不知道如何在 python 中执行此操作。我的“直觉”本能是遍历数据框,类似于伪代码:

for line1 in df1:
   for line2 in df2:
      if(line1[:3]==line2[:3]):
         write_to_file_1(line1[2:], line2[2:])
      else
         write_to_a_file(nomatch_file1, line1)
         write_to_a_file(nomatch_file2, line2)

但我无法让它工作。

这是一些示例数据

1, 1, 多伦多, 渥太华, 布拉德, 戴维斯, 2020 年 1 月 1、2,温哥华,基洛纳,迈克尔,詹金斯,2020 年 2 月

第二个数据帧

43、45 岁,多伦多,渥太华,布拉德,戴维斯,2020 44、46 日,蒙特利尔,哈利法克斯,乔治,康斯坦萨,2019 年 3 月

在这种情况下,我想在第二个数据帧的第一行比较 TORONTO, OTTAWA, BRAD, DAVIS, JAN, 2020,所以它会返回一个新元组

1,1,43,45,多伦多,渥太华,布拉德,戴维斯,2020 年 1 月

【问题讨论】:

请显示示例数据,您不需要显示 10 列,但 6 列就可以了。还要定义“比较”的含义:“整数相等”? '浮点精度'? '字符串相等'? '子串成员'? “模糊字符串相似度”? '列表等价'?等等 顺便说一句,最好将数据框的行称为“行”而不是“行” 【参考方案1】:

解决方法是使用 df1.merge(df2, on=['city1', 'city2',....])

这对我有用,除非数据类型不同。

【讨论】:

以上是关于如何比较两个熊猫数据框并返回将它们相互映射的索引?的主要内容,如果未能解决你的问题,请参考以下文章

使熊猫具有多索引列的多个数据框并完全连接

连接两个熊猫数据框并重新排序列

如何在同一个面积图中绘制两个数据框并通过深色和浅色区分它们?

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

如何迭代熊猫数据框并创建新列

在熊猫中将两个系列组合成一个DataFrame