Pandas 熊猫:比较两个具有重复数据的数据帧

Pandas 熊猫:比较两个具有重复数据的数据帧,pandas,Pandas,我有两个数据帧,其中一个有重复数据帧。我希望在输出中保留一个副本 import pandas as pd df1 = pd.DataFrame(data = {'col1' : ['M', 'M', 'M', 'M', 'C','C','C'], 'col2' : [10.5,11.5,14,15.5,51,51,52]}) df2 = pd.DataFrame(data = {'col1' : ['M', 'C', 'C'], 'col2' : [10.5, 51, 52]}) 首选输出是

我有两个数据帧,其中一个有重复数据帧。我希望在输出中保留一个副本

import pandas as pd
df1 = pd.DataFrame(data = {'col1' : ['M', 'M', 'M', 'M', 'C','C','C'], 'col2' : [10.5,11.5,14,15.5,51,51,52]}) 
df2 = pd.DataFrame(data = {'col1' : ['M', 'C', 'C'], 'col2' : [10.5, 51, 52]})
首选输出是

M    11.5       
M    14    
M    15.5    
C    51 

因为在df1中有两行51代表C,所以任何合并操作都会删除或保留这两行。

您可以组合
concat
+
删除重复项
,我使用
cumcount
创建了一个新键,每次只删除一次多行

s=pd.concat([df1,df2],keys=['df1','df2'])

s.assign(cumcount=s.groupby([s.index.get_level_values(0),s.col1,s.col2]).cumcount()).\  
   drop_duplicates(keep=False).\
     reset_index(level=0,drop=True).\
       drop('cumcount',1)
Out[127]: 
  col1  col2
1    M  11.5
2    M  14.0
3    M  15.5
5    C  51.0

您可以组合
concat
+
删除重复项
,我使用
cumcount
创建了一个新键,每次仅删除多行一次

s=pd.concat([df1,df2],keys=['df1','df2'])

s.assign(cumcount=s.groupby([s.index.get_level_values(0),s.col1,s.col2]).cumcount()).\  
   drop_duplicates(keep=False).\
     reset_index(level=0,drop=True).\
       drop('cumcount',1)
Out[127]: 
  col1  col2
1    M  11.5
2    M  14.0
3    M  15.5
5    C  51.0

使用
集合
库中的
计数器

这是假设OP希望从第一个数据帧中删除第二个数据帧中找到的唯一对的数量。看


使用
集合
库中的
计数器

这是假设OP希望从第一个数据帧中删除第二个数据帧中找到的唯一对的数量。看


没有看到您的首选输出是如何通过您的输入实现的。。。您能进一步解释一下您在这里应用的逻辑吗?在我看来,op希望将在df1中找到的唯一元组的数量减去在df2中找到的元组的数量。我猜,Jon,df1是较大的数据集(客户机),df2是与另一个较大数据库的子集相匹配的子集。银行也有col2,但值不会与客户的col2完全匹配(以最小差异匹配)。更糟糕的是,每个数据集都有数百个重复项。一旦代码完成,我将与大家分享。不知道你的输入是如何实现你的首选输出的。。。您能进一步解释一下您在这里应用的逻辑吗?在我看来,op希望将在df1中找到的唯一元组的数量减去在df2中找到的元组的数量。我猜,Jon,df1是较大的数据集(客户机),df2是与另一个较大数据库的子集相匹配的子集。银行也有col2,但值不会与客户的col2完全匹配(以最小差异匹配)。更糟糕的是,每个数据集都有数百个重复项。我将在代码完成后共享。Works。谢谢你,温。@Selvan-yw~:-)编码工作愉快。谢谢你,温。@Selvan-yw~:-)编码愉快