首页 > 解决方案 > 如何在两个表之间获取完全匹配的数据 - 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 中获得正确的输出?

标签: sqlpandas

解决方案


根据您想要的输出,您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

推荐阅读