python - 如何在2个数据框之间的2列中找到具有相同值但在其他列pandas中具有不同值的行
问题描述
我有 2 个数据框,其样本值如下:
df1 :
col1 cold2 cold3 cold4
a bb cc d
b aa ee e
df2 :
col1 cold2 cold3 col4
a ee ff d
e gg hh k
我想找到 2 个数据框中的所有行在 col1+col4 中具有相同的值,但在 col2 或 col3 中具有不同的值
输出应该是这样的:
df3:
col1 cold2 cold3 cold4
a bb cc d
a ee ff d
感谢帮助。
解决方案
我认为你可以使用:
#get all matched rows by columns
df = df1.merge(df2, on=['col1','col4'], suffixes=('','_'))
#filter for not matched
df = df[df['col2'] != df['col3']]
#filter columns - same like df1
df1 = df[df1.columns]
#filter added new columns
df2 = df[df.columns.difference(df2.columns).union(['col1','col4'])]
#join together - rename values for align data
df = pd.concat([df1,
df2.rename(columns=dict(zip(df2.columns, df1.columns)))],
ignore_index=True)
print (df)
col1 col2 col3 col4
0 a bb cc d
1 a ee ff d
推荐阅读
- git - 一切都是最新的,但承诺不为空
- css - Angular 8+ 的高级@import 样式
- bash - Bash 在显示之前测试文件的有效(分页)行
- javascript - 如何让我无法输入我的 textarea 标签?
- javascript - 实现如何更改第二个选择选项取决于第一个?
- excel - 在另一个列范围中查找一系列行
- javascript - 使用 forEach 将对象推入数组
- oracle - Oracle SQL:在文本之后和分隔符(或其他字符)之前提取值
- laravel - Laravel Excel 没有下载
- arrays - 使用 useState 钩子将项目添加到以 React 状态存储的数组的正确方法?