Python 基于熊猫中的行值比较数据帧

Python 基于熊猫中的行值比较数据帧,python,python-3.x,pandas,dataframe,data-analysis,Python,Python 3.x,Pandas,Dataframe,Data Analysis,在数据之间没有1:1基数的情况下,使用Pandas比较两个数据集(.csv文件)的最佳方法是什么 例如:下面是数据集1中的一个示例- #### Row Item Color Price 01 Shirt Red $30 02 Hat Blue $10 以及来自数据帧2的一个示例- #### Row Item Color Price 01 Trouser Black $20 02 Bag Yellow $ 30 03 Hat Blue $10 04 Shirt Red $30 因此,如果我想比

在数据之间没有1:1基数的情况下,使用Pandas比较两个数据集(.csv文件)的最佳方法是什么

例如:下面是数据集1中的一个示例-

#### Row Item Color Price
01 Shirt Red $30
02 Hat Blue $10
以及来自数据帧2的一个示例-

#### Row Item Color Price
01 Trouser Black $20
02 Bag Yellow $ 30
03 Hat Blue $10
04 Shirt Red $30
因此,如果我想比较两个数据集中有衬衫行的所有行

最好的方法是什么

我用的是熊猫/蟒蛇3.7

谢谢

检查此示例:

DF1 = pd.DataFrame(data={'c1':['abc','abc','iop','iop'],'c2':['xyz','mno','yut','trg'],'c3':[0,0,0,0]})

    c1  c2  c3
0   abc xyz 0
1   abc mno 0
2   iop yut 0
3   iop trg 0


DF2 = pd.DataFrame(data={'c1':['iop','abc','bhj','iop','xdf'],'c2':['yut','mno','uio','yut','edc']})
    c1  c2
0   iop yut
1   abc mno
2   bhj uio
3   iop yut
4   xdf edc
match = pd.merge(DF1,DF2,on=['c1','c2'],how='inner')
print(match)

    c1  c2  c3
0   abc mno 0
1   iop yut 0
2   iop yut 0
因此,通过使用
pd.merge
可以获得匹配的行

检查此示例:

DF1 = pd.DataFrame(data={'c1':['abc','abc','iop','iop'],'c2':['xyz','mno','yut','trg'],'c3':[0,0,0,0]})

    c1  c2  c3
0   abc xyz 0
1   abc mno 0
2   iop yut 0
3   iop trg 0


DF2 = pd.DataFrame(data={'c1':['iop','abc','bhj','iop','xdf'],'c2':['yut','mno','uio','yut','edc']})
    c1  c2
0   iop yut
1   abc mno
2   bhj uio
3   iop yut
4   xdf edc
match = pd.merge(DF1,DF2,on=['c1','c2'],how='inner')
print(match)

    c1  c2  c3
0   abc mno 0
1   iop yut 0
2   iop yut 0

因此,通过使用
pd.merge
您可以获得匹配的行

您可以像这样简单地使用pandas
merge

pd.merge(df1[df1.Item == 'Shirt'], df2[df2.Item == 'Shirt'], on=['Item','Color', 'Price')
只有当两个数据帧中的所有列都与Item='Shirt'匹配且相应的列也相等时,才会生成输出


如果这是您想要的,请告诉我。

您可以像这样简单地使用pandas
merge

pd.merge(df1[df1.Item == 'Shirt'], df2[df2.Item == 'Shirt'], on=['Item','Color', 'Price')
只有当两个数据帧中的所有列都与Item='Shirt'匹配且相应的列也相等时,才会生成输出


如果这是您想要的,请告诉我。

合并后过滤

df1.merge(df2,on='Item').loc[lambda x : x.Item=='Shirt']
Out[89]: 
   Row_x   Item Color_x Price_x  Row_y Color_y Price_y
0      1  Shirt     Red     $30      4     Red     $30

合并后过滤

df1.merge(df2,on='Item').loc[lambda x : x.Item=='Shirt']
Out[89]: 
   Row_x   Item Color_x Price_x  Row_y Color_y Price_y
0      1  Shirt     Red     $30      4     Red     $30

预期输出是什么?预期输出应该是-衬衫红$30与两个数据帧中的衬衫红$30匹配,帽子蓝$10与两个数据帧中的帽子蓝$10匹配。因此,基本上,如果两个数据帧中都有一个名为Shirt的行值,那么应该比较这些行的所有列。预期输出是什么?预期输出应该是-Shirt Red$30与两个数据帧中的Shirt Red$30匹配,Hat Blue$10与两个数据帧中的Hat Blue$10匹配。因此,基本上,如果两个数据帧中都有一个名为Shirt的行值,那么应该比较这些行的所有列。因此,我不知道这两个数据集中的行值Shirt在哪里。我还能使用内部合并吗?太棒了!我要试试这个并更新。使用多列作为列表也有帮助,因为我有一组“键”列,如果发现行元素相同,则要对这些列进行比较。:)当然,您可以检查文档,以便处理合并函数提供的后缀。如果不需要,您也可以删除它们:)@GreedyCoder:如果任何答案都有帮助,请不要忘记接受其中一个答案,以便人们以后可以参考此问题并找到解决方案。:)谢谢,我不知道行值Shirt在这两个数据集中的位置。我还能使用内部合并吗?太棒了!我要试试这个并更新。使用多列作为列表也有帮助,因为我有一组“键”列,如果发现行元素相同,则要对这些列进行比较。:)当然,您可以检查文档,以便处理合并函数提供的后缀。如果不需要,您也可以删除它们:)@GreedyCoder:如果任何答案都有帮助,请不要忘记接受其中一个答案,以便人们以后可以参考此问题并找到解决方案。:)谢谢