我有两个DF,ABC和LOP。ABC:有很多列,其中有三个关键列,称为[A]、[B]、[C] LOP:有很多列,其中有一个键列称为[L]
ABC_data = [['A001', 'B001','C001','xxx','nnn'], ['A002', 'B002','C002','yyy','mmm'], ['A003', 'B003','C003','zzz','ooo']]
ABC = pd.DataFrame(ABC_data, columns = ['A', 'B','C','Other_1','Other_2'])
print(ABC)
A B C Other_1 Other_2
0 A001 B001 C001 xxx nnn
1 A002 B002 C002 yyy mmm
2 A003 B003 C003 zzz ooo
LOP_data = [['A002','sth1'], ['B004','sth2'], ['C002','sth3'], ['C003','sth4']]
LOP = pd.DataFrame(LOP_data, columns = ['L', 'other_info'])
print(LOP)
L other_info
0 A002 sth1
1 B004 sth2
2 C002 sth3
3 C003 sth4
- 我想要的**:我想做左连接,ABC作为左df,LOP作为右df。基于[L]中的值是否等于[A]或[B]或[C]。
注意:[L]只能等于[A]、[B]、[C]中的一个,这意味着它不会同时等于[A]和[B]
如果等于,则左连接所有LOP列中的值如果没有[L]值匹配[A]或[B]或[C],则将为null
- 结果应该是这样的:**
A B C Other_1 Other_2 L L_other_info
0 A001 B001 C001 xxx nnn None None
1 A002 B002 C002 yyy mmm A002 sth1
2 A002 B002 C002 yyy mmm C002 sth3
3 A003 B003 C003 zzz ooo C003 sth4
- 我努力**
1.我试过合并函数,但它只能做AND,但我必须做OR
1.我试着把ABC表分成三份,第一份让[B]和[C]为NULL,第二份让[A]和[C]为NULL,第三份让[A]和[B]为NULL。然后将它们分别与LOP合并,并将3个df合并。但是我在删除行时遇到了麻烦,因为如果我删除所有[L]都是NULL值的行,它将删除case [there is no L match ABC],但是我想保留这些NULL并删除3df中的重复项,所以我失败了
1条答案
按热度按时间mrphzbgm1#
你可以在合并前
.melt()
:然后,您可以使用索引将其合并回来: