首页 > 解决方案 > python - 如何基于python中的字符串搜索合并两个熊猫数据框?

问题描述

我有2个以下数据框。我想合并“项目”列上的两个数据框,下面是我的预期输出和代码。但是,下面pandas的代码显示重复的行,如下所示。不知道代码有什么问题?我在想可能是我必须在“项目”列上进行字符串搜索,然后合并数据框。但是,我不确定如何实现这一目标?请用您的代码提供解释。

在此先感谢您的时间!

第一个数据框

Item               ID
ABC                1
ABC                2
ABC                3
CD                 12
EF                 11

第二个数据框

Name      Item         Price
Name1     ABC           123.00
Name2     ABC           110
Name 3    ABC           100
Name4      CD           50

预期产出

Name      Item        ID     Price
Name1     ABC          1    123.00
Name2     ABC          2     110
Name 3    ABC          3     100
 Name4    CD           12    50

代码

pd.merge(df1,df2,on="Item",how='outer')

上面的代码显示在输出下面

    Item    ID  Name    Price
0   ABC 1   Name1   123.0
1   ABC 1   Name2   110.0
2   ABC 1   Name3   100.0
3   ABC 2   Name1   123.0
4   ABC 2   Name2   110.0
5   ABC 2   Name3   100.0
6   ABC 3   Name1   123.0
7   ABC 3   Name2   110.0
8   ABC 3   Name3   100.0
9   CD  12  Name4   50.0
10  EF  11  NaN     NaN

标签: pythonpandasdataframemerge

解决方案


我能想到的最简单的方法是在输入数据帧中添加另一列来模拟索引 [0, 1, 2, 3...]。即使“项目”被复制,这也会产生一个唯一的条目,并导致正确的合并。

例子:

import pandas as pd

A = [[1, 2, 3, 4], ['A', 'A', 'B', 'C'], [0, 1, 2, 3]]
B = [[10, 20, 30, 40], ['A', 'A', 'B', 'C'], [0, 1, 2, 3]]

df = pd.DataFrame(A).T
df.columns = ['Val', 'ID', 'IDX']
print(df)

df2 = pd.DataFrame(B).T
df2.columns = ['Other', 'ID', 'IDX']
print(df2)

M = pd.merge(df, df2)
print(M)

推荐阅读