Pandas:两个数据帧的差异

2024-06-01 05:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要比较不同行大小的两个数据帧,并打印出不匹配的行。我们来看看下面两个:

df1 = DataFrame({
'Buyer': ['Carl', 'Carl', 'Carl'],
'Quantity': [18, 3, 5, ]})

df2 = DataFrame({
'Buyer': ['Carl', 'Mark', 'Carl', 'Carl'],
'Quantity': [2, 1, 18, 5]})

在df2上逐行打印出不在df1中的行的最有效方法是什么?例如:

Buyer     Quantity 
Carl         2
Mark         1

重要提示:我不想吵架:

Buyer     Quantity 
Carl         3

包含在差异中:

我已经试过了: Comparing two dataframes of different length row by row and adding columns for each row with equal valueOutputting difference in two Pandas dataframes side by side - highlighting the difference

但这些和我的问题不符。

谢谢你

安迪


Tags: 数据方法dataframebybuyersidequantityrow
3条回答
diff = set(zip(df2.Buyer, df2.Quantity)) - set(zip(df1.Buyer, df1.Quantity))

这是我想到的第一个解决办法。然后可以将差异集放回DF中进行演示。

^{}使用方法“outer”的2个dfs并传递参数indicator=True这将告诉您行是否同时存在于/left only/right only中,然后可以在以下时间之后筛选合并的df:

In [22]:
merged = df1.merge(df2, indicator=True, how='outer')
merged[merged['_merge'] == 'right_only']

Out[22]:
  Buyer  Quantity      _merge
3  Carl         2  right_only
4  Mark         1  right_only

你会发现这是最好的:

df2[ ~df2.isin(df1)].dropna()

相关问题 更多 >