sql - 如何在两个表之间获取完全匹配的数据 - SQL 或 pandas
问题描述
我有两个表,并且希望在两个表之间有完全匹配的行,就像在所需的输出数据中一样。
table 1:
PID PDate Col1 Col2 Amount
100 20210624 AAA PPP 10000
100 20210624 AAA PPP 888
100 20210624 AAA CAT 10000
100 20210624 AAA CAT 888
222 20210624 MMM PPP 700
222 20210624 DDD PPP 660
666 20210624 DDD CAT 500
table 2:
PID PDate Col1 Col2 Amount
100 20210624 AAA PPP 10000
100 20210624 AAA PPP 888
100 20210624 AAA PPP 10000
100 20210624 AAA PPP 888
222 20210624 MMM PPP 700
222 20210624 DDD PPP 660
666 20210624 DDD CAT 500
666 20210624 DDD CAT 500
Desired output:
PID PDate Col1 Col2 Amount
100 20210624 AAA PPP 10000
100 20210624 AAA PPP 888
222 20210624 MMM PPP 700
222 20210624 DDD PPP 660
666 20210624 DDD CAT 500
我尝试创建 row_number() over(按 PID、PDate、Col1、Col2 顺序按 PID、PDate、Col1、Col2 数量进行分区)然后加入它们,但 PID 100 的顺序会有所不同。如果我不添加行号,那么我在输出中两次得到 PID 666,但两个表之间只有一行匹配。如何在 sql 或 pandas 中获得正确的输出?
解决方案
根据您想要的输出,您drop_duplicates
可以merge
:
>>> table_one.merge(table_two)
PID PDate Col1 Col2 Amount
0 100 20210624 AAA PPP 10000
1 100 20210624 AAA PPP 10000
2 100 20210624 AAA PPP 888
3 100 20210624 AAA PPP 888
4 222 20210624 MMM PPP 700
5 222 20210624 DDD PPP 660
6 666 20210624 DDD CAT 500
7 666 20210624 DDD CAT 500
>>> table_one.merge(table_two).drop_duplicates()
PID PDate Col1 Col2 Amount
0 100 20210624 AAA PPP 10000
2 100 20210624 AAA PPP 888
4 222 20210624 MMM PPP 700
5 222 20210624 DDD PPP 660
6 666 20210624 DDD CAT 500
推荐阅读
- python - 如何将列表框中的选定项目值从一个模块返回到另一个模块?
- python - 通过命令提示符设置可选系统参数
- r - 如何在 R 中获取数值向量的元素,并创建一个包含从 1 开始的 seq 的新向量:(每个元素)
- node.js - 从 onelogin 进行身份验证并重定向到仪表板
- r - 如何从 R 中的另一个列表列表中删除列表列表?
- python - Scrapy - 重定向到验证码页面时抓取页面
- bash - BASH - OPTARG 中的 getopts 正则表达式
- react-native - TypeError:null 是一个对象(评估'reactNativeImagCropPicker.default.openPicker')
- opengl - LWJGL3 和 OpenGL 是否需要着色器才能渲染?
- typescript - 如何在新的组合 API 中键入计算属性?