Pandas - OR条件用于连接2个数据集

时间:2017-07-04 12:50:29

标签: python python-3.x pandas numpy

Pandas的新手

我有2个数据集,示例数据:

C1 C2 C3 C4
A ANN BXX 9
B YYY NNN 10
C UUU DAF 11



C7 C8 C9 
N PP   C
B KK  68
F UUU  A

期望的输出:

A ANN UUU
B YYY KK
C UUU PP

我需要在以下的SQL查询中加入数据集:

select C1 , C2,C8 from tab1 A, tab2  B where  (A.C1 = B.C7 or A.C1 = B.C9);

简而言之,如果C1 = C7或C1 = C9,我需要合并2个数据集。我理解如何加入一个条件。

类似的东西:

OuT = pd.merge(tab1 , tab2 , left_on = 'C1', right_on =['C7' OR 'C9'], how = 'inner')

1 个答案:

答案 0 :(得分:1)

我认为您需要melt然后merge重新塑造tab2

tab2 = tab2.melt('C8', value_name='C1').drop('variable', axis=1)
#older pandas versions
#tab2 = pd.melt(tab2, id_vars='C8', value_name='C1').drop('variable', axis=1)

print (tab2)
    C8  C1
0   PP   N
1   KK   B
2  UUU   F
3   PP   C
4   KK  68
5  UUU   A

#inner join by default, so can omit how='inner'
OuT = pd.merge(tab1 , tab2 , on = 'C1')
print (OuT)
  C1   C2   C3  C4   C8
0  A  ANN  BXX   9  UUU
1  B  YYY  NNN  10   KK
2  C  UUU  DAF  11   PP

然后如果需要过滤列:

OuT = pd.merge(tab1 , tab2 , on = 'C1')[['C1','C2','C8']]
print (OuT)
   C1   C2   C8
0  A  ANN  UUU
1  B  YYY   KK
2  C  UUU   PP