python - 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
解决方案
我能想到的最简单的方法是在输入数据帧中添加另一列来模拟索引 [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)
推荐阅读
- javascript - 在 JavaScript 中将 1D 数组转换为 2D、3D 数组?
- java - Eclipse中使用字段生成的构造函数中的super关键字的目的是什么?
- ruby - 如何搜索两个或多个空格和指针 ruby
- rust - 如何使用 serde 反序列化 Prost 枚举?
- linux - 如何找到哪个进程定期写入文件?
- python - Python 类的属性错误,但已声明
- mysql - 在 PHP MySQL 中相应地对数字和字母数字进行排序
- opencv - OpenCV CUDA API 在第一次调用时非常慢
- asp.net - 使用 Stripe SDK 时如何检索结帐信息
- r - Exporting R data - column classed as data.frame exports as blank with write_xlsx