提问人:user1063049 提问时间:7/13/2023 最后编辑:user1063049 更新时间:7/13/2023 访问量:41
如何在 python 中将第 1 列的每一行与第 2 列的所有行进行比较?
how can I compare each row of column 1 against all rows of column 2 in python?
问:
测试数据:在此输入图片描述
finaldata1:abc、nck、xkl、mzn
finaldata2:Abk、Nck、cnl、mzn
校验列:cnl、Abk、Abc
“相同”检查的预期结果:
finaldata1:abc
finaldata2:Abk、cnl
我尝试将 finaldata1 和 finaldata2 与检查列进行比较。我一次只做一列,因为我不知道如何使用多列组合搜索。然后,如果存在差异,也打印这些(不要也寻找哪些是不同的)
尝试的代码:
import pandas as pd
df = pd.read_excel('testComparisons.xlsx')
#going to check same ones first, and then later on do the differences
result1 = df['finaldata1'].isin(df['check'])
print(result1):
0 True
1 False
2 False
3 False
现在,如果我想打印出上面的结果,仅显示 Abc 作为结果,以下代码不会产生正确的结果 - 我很困惑!
print(df[result1])
finaldata1 finaldata2 check
0 Abc Abk cnl
我认为它应该只返回第一行,第一列,因为这是唯一正确的?相反,它返回整个第一行,而不限于第一列。
然后要反转我的代码,我想我只需要添加波浪号~,它就变成了“is not in”。
我尝试遵循如何像在 SQL 中那样使用“in”和“not in”过滤 Pandas 数据帧,但这导致我真的错了,因为所有答案都变成了错误,这在我运行以下内容时是不正确的:
result1 = df[['finaldata1','finaldata2']].isin(df['check'])
finaldata1 finaldata2
0 False False
1 False False
2 False False
3 False False
答:
0赞
am2
7/13/2023
#1
我不确定,我是否完全理解您的期望,但是您为什么不使用它呢?
finaldata1 = ['Abc', 'Nck', 'xkl', 'mzn']
finaldata2 = ['Abk', 'Nck', 'cnl', 'mzn']
check = ['cnl', 'Abk', 'Abc']
same_finaldata1 = set(finaldata1) & set(check)
same_finaldata2 = set(finaldata2) & set(check)
print (same_finaldata1, same_finaldata2)
评论