在pandas

时间:2017-04-21 22:14:35

标签: python mysql pandas merge

我正在使用python来使用pandas合并一个表,但我遇到了一些麻烦。这是问题所在。

我有2个table_A和table_B。我在桌子上有两列_A说“一”,“两”。 table_B上有两列说“一”,“三”。 table_B中的列“one”有一些值映射到table_A中的列“one”,而某些值映射到table_A中的列“two”。如何在python中映射类似于query的值:

Select * from Table_A a, Table_B b
where a.one = b.one or a.two=b.one 

谢谢!

2 个答案:

答案 0 :(得分:5)

考虑使用merge进行连接,这会将您的SQL查询转换为OR,通常类似于UNION

pd.concat([pd.merge(table_A, table_B, on='one'),
           pd.merge(table_A, table_B, left_on='two', right_on='one')])

答案 1 :(得分:0)

一种选择是从table_B中的table_A重新创建其中一列。

我会充实一个案子。 A是名字和姓氏的数据框,您想填写每个人的“分数”。 B是分数的DataFrame,仅与一个名称相关联-它可以是第一个或最后一个。我们可以使用A为B中不明确的名称列创建地图。

A = pd.DataFrame({'firstName': ['Adam', 'Bob', 'Charlie'],
            'lastName': ['Axe', 'Button', 'Cobb']})

# B's name column has two first names and one last name.
B = pd.DataFrame({'name': ['Adam', 'Bob', 'Cobb'],
                 'score': ['A', 'B', 'C']})

# A mappable Series
s = A.set_index('firstName').lastName  
B['lastName'] = B.name.replace(s)  
cols = ['lastName', 'score']
A.merge(B[cols], on='lastName')