如何比较两个熊猫数据框并返回将它们相互映射的索引?
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',....])
这对我有用,除非数据类型不同。
【讨论】:
以上是关于如何比较两个熊猫数据框并返回将它们相互映射的索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一个面积图中绘制两个数据框并通过深色和浅色区分它们?