python - 使用 python pandas 检查两列之间的数据匹配和不匹配
解决方案
这里有四行代码可以满足您的需求:
columns_to_compare =['c2','c3']
dfa['Combo'] = dfa[columns_to_compare].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)
dfb['Combo1'] = dfb[columns_to_compare].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)
[i for i,x in enumerate(dfb['Combo1'].tolist()) if x not in dfa['Combo'].tolist()]
解释
假设您想查看哪些dfb行不在dfa中,对于列c2和c3。
- 为此,请考虑以下方法:
在dfa中创建一列“Combo”,其中“Combo”的每一行都包含一个逗号分隔的字符串,表示要比较的所选列的值(对于相关行)
dfa['Combo'] = dfa[dfa.columns].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)
c1 c2 c3 c4 Combo
0 v 100 tech hhh 100, tech
1 f 110 jjj scb 110, jjj
2 h 235 None kkk 235
3 m 999 iii lop 999, iii
4 s 333 mnp sos 333, mnp
5 d 39 lf kdk 39, lf
对dfb应用相同的逻辑
c1 c2 c3 c4 Combo1
0 v 100 tech hhh 100, tech
1 h 235 None mckkk 235
2 m 999 iii lok 999, iii
3 f 110 jkl scb 110, jkl
4 L 777 9kdf ooo 777, 9kdf
5 s 333 mnp1 sos1 333, mnp1
从 dfb 创建一个包含所需索引的列表:
[i for i,x in enumerate(dfb['Combo1'].tolist()) if x not in dfa['Combo'].tolist()]
或显示实际的行值(不是索引):
[[x] for i,x in enumerate(dfb['Combo1'].tolist()) if x not in dfa['Combo'].tolist()]
行索引结果
[3, 4, 5]
行值结果
[['110, jkl'], ['777, 9kdf'], ['333, mnp1']]
推荐阅读
- javascript - 使用appendChild创建元素后如何将EventListener添加到元素?
- excel - Excel VBA Worksheet_Change 的值范围
- typescript - 使用组合 API 和 onBeforeRouteUpdate 时如何正确抽象数据加载?
- javascript - 有没有办法让函数检查值?
- dataframe - 如何在 Spark 数据框中的窗口中获取最大行数
- python - 当我尝试解压缩 .tar.gz 文件时,Python 不一致地创建文件夹
- ruby-on-rails - Rails Model.find 将 id 视为数组。我怎样才能让它像普通身份证一样?
- r - 如何为 ggsurvplot 图例重新排序 survfit 对象中的地层?
- java - 方法接受 Java 中不同对象的列表
- javascript - 如何修复 setInterval 缓慢:twinmax 和 jquery