我正在使用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
谢谢!
答案 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')