根据条件在熊猫中合并两个数据框

时间:2020-05-15 21:34:55

标签: python pandas dataframe merge

你好,我需要合并两个数据框

第一个具有两列

df1

Groups Names
G1    SeqA
G1    Seq1(+)
G1    SeqC
G1    Seq2(-)
G1    Seq3(+)
G1    SeqB
G1    SeqG
G2    Seq8(-)
G2    SeqY
G2    SeqH
G3    Seq10(+)
G3    SeqK
G3    Seq12(-) 

和另一个,例如df2:

COL1    COL2  COL3
Seq1(+) SeqA  89
Seq2(-) SeqA  67
Seq3(+) SeqB  89
Seq2(-) SeqC  98
Seq8(-) SeqY  45
Seq8(-) SeqH  90
Seq10(+) SeqK 76
Seq11(-) SeqL 78
Seq12(-) SeqK 89

,其思想是将两个数据帧合并在一起,以便将Groups信息添加到df2中。

这个想法是先为df1中的每个元素检入Names,如果该元素具有(+)(-),然后检查其对应的{ {1}},然后继续Group,并在列df2上添加相应的Group

例如,在Group df1中有一个line 2,其Seq1(+)Group,然后我在{{1}中查找该行},其中{{1}中存在G1,我将df2添加到“组”列中。

所以最后我应该得到类似的东西:

Seq1(+)

如您所见,上次合并的df中不存在COL1,因为G1的{​​{1}}中不存在

有人对使用python和pandas有想法吗?

1 个答案:

答案 0 :(得分:0)

df3 = df1.merge(df2, how='inner', left_on='Names', right_on='COL1').drop('Names', axis=1)


Groups  COL1    COL2    COL3
0   G1  Seq1(+) SeqA    89
1   G1  Seq2(-) SeqA    67
2   G1  Seq2(-) SeqC    98
3   G1  Seq3(+) SeqB    89
4   G2  Seq8(-) SeqY    45
5   G2  Seq8(-) SeqH    90
6   G3  Seq10(+)    SeqK    76
7   G3  Seq12(-)    SeqK    89