python - 基于两列识别两个 Pandas DataFrames 之间共享的行
问题描述
相关:如何在 2 个数据框之间的 2 列中找到具有相同值但在其他列中具有不同值的行 pandas
我有两个 DataFrame:df1
和df2
.
我想在'columnA'
(object)和'columnB'
(int)中找到这些组合DataFrame中具有相同值的所有行。这些行在我不关心的其他列中将具有不同的值。这些 DataFrame 的形状也不同。
我试过类似的东西:
concat = pd.concat([df1, df2])
overlap = concat[concat.duplicated(subset=['columnA','columnB'], keep=False)]
但是输出看起来不正确(也许是)。只是想检查一下-我错过了什么吗?
编辑:
假设我想要所有具有相同值columnA
但不同值的行columnB
- 这可行吗?
df3 = (concat[concat.duplicated(subset=['columnA'], keep=False)]
.drop_duplicates(subset=['columnB']))
解决方案
您可以使用pd.merge
df1 = pd.DataFrame(data=[('A','B','C'),('E','F','G'),('A','B','F')], columns=['columnA','columnB','columnC'])
df2 = pd.DataFrame(data=[('X','Y','G'),('A','B','Y'),('A','C','F')], columns=['columnA','columnB','columnC'])
df2['columnB'] = df2['columnB'].astype(str) #convert to string
print(df1)
columnA columnB columnC
0 A B C
1 E F G
2 A B F
print(df2)
columnA columnB columnC
0 X Y G
1 A B Y
2 A C F
然后申请后pd.merge
:
df_m = pd.merge(df1,df2,how='inner',on='columnA')
----
df_m
columnA columnB_x columnC_x columnB_y columnC_y
0 A B C B Y
1 A B C C F
2 A B F B Y
3 A B F C F
关于您的编辑,试试这个:
df_final = df_m[df_m['columnB_x'] != df_m['columnB_y']]
------
print(df_final)
columnA columnB_x columnC_x columnB_y columnC_y
1 A B C C F
3 A B F C F
推荐阅读
- python - 如何根据密钥是否已经存在来更新我的字典?
- python - python通过编译函数创建和注册模块
- java - 需要一些关于处理 Java 中许多字段的建议
- javascript - 节点/Multer | 无法根据字段名获取 sperarte 文件名
- android - 如何从 Android 中的 IP 地址获取设备名称?
- django - 我可以在 django 中有两个编辑配置文件表单一个是主要的编辑配置文件表单,一个是 2 个字段
- jquery - 如何在 jquery datepicker 中更改月份和年份选择器的字体颜色?
- telegram - 如何在没有类型命令的情况下自动响应机器人加入组的新成员
- tomcat - tomcat restart 追加到日志而不是覆盖日志
- flutter - 颤振小部件测试 - 如何执行“返回上一个屏幕”的测试