pandas 查找 Dataframe 中两列之间的差异,但保持行索引可用

jucafojl  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(106)

我有两个 Dataframe :

df1 = pd.DataFrame({"product":['apples', 'bananas', 'oranges', 'kiwi']})
df2 = pd.Dataframe({"product":['apples', 'aples', 'appples', 'banans', 'oranges', 'kiwki'], "key": [1, 2, 3, 4, 5, 6]})

我希望使用set(df2).difference(df1)之类的函数来查找product列之间的差异,但我希望保留索引。
结果=['苹果','苹果','香蕉','猕猴桃'][2 3 4 6]
每当我使用set.difference()时,我都会得到不同值的列表,但会丢失键索引。

6gpjuf90

6gpjuf901#

您必须过滤df 2帧,检查df 2中的元素是否不在df 1中:

df2[~df2["product"].isin(df1['product'])]
  • ~对布尔值Series的值求反。
  • ser1.isin(ser 2)是一个布尔级数,它为ser 1的每个元素给出是否可以在ser 2中找到该值。
cbeh67ev

cbeh67ev2#

我猜您正在尝试执行左反连接,这意味着您只想保留df2中不存在于df1中的行。在这种情况下:

df1 = pd.DataFrame({"product":['apples', 'bananas', 'oranges', 'kiwi']})
df2 = pd.DataFrame({"product":['apples', 'aples', 'appples', 'banans', 'oranges', 'kiwki'], "key":[1, 2, 3, 4, 5, 6]})

# left join
joined_df = df2.merge(df1, on='product', how='left', indicator=True)
# keeping products that were only present in df2
products_only_in_df2 = joined_df.loc[joined_df['_merge'] == 'left_only', 'product']
# filtering df2 using the above df so we have the keys as well
result = df2[df2['product'].isin(products_only_in_df2)]

相关问题