Python Pandas水平比较 Dataframe 中的列

o0lyfsai  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(104)

我有一个从SQL中提取的表,如下所示。背景是有两个系统跟踪交易。有时,两个系统捕获的项目之间存在差异。
我希望用python Pandas(或直接用SQL)编写一个函数/循环,它可以将系统A中的项目1、2和3与系统B中的项目1、2和3进行比较,并返回没有共同项目的任何行。

以下是预期输出。

解释输出。在事务ID 1中,因为咖啡在两个系统中都出现,所以不需要返回。在事务ID 2中,汤在系统A中没有任何位置,因此应返回此行。在事务ID 5中,系统B未能捕获任何内容,因此应返回此行。
先谢了。

2guxujil

2guxujil1#

您可以拆分 Dataframe ,每次拆分compare,并使用比较的索引从原始 Dataframe 中获取对应的行。

df1 = df[['SYS A Item 1', 'SYS A Item 3', 'SYS A Item 3']]
df2 = df[['SYS B Item 1', 'SYS B Item 3', 'SYS B Item 3']]

idx = df1.compare(df2).index

df.iloc[idx]
h43kikqp

h43kikqp2#

您可以根据条目创建集合,然后检查这些集合是否不共享单个项目:

a = df[['sys a item 1', 'sys a item 2', ...]].apply(set, axis=1).copy()  # <- columns of system a
b = df[['sys b item 1', 'sys b item 2', ...]].apply(set, axis=1).copy()  # <- columns of system b
# create mask where sys-a and sys-b don't share a single item
mask = [set(x).isdisjoint(y) for x, y in zip(a, b)]
# filter dataframe by using the mask
df[mask]

相关问题