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~:-)编码愉快