我在Pandas中有两个数据框DB1和DB2,都带有一个names
列,其中包含公司名称。根据{{1}}列,我将模糊字符串匹配与string_grouper
包一起用于为DB1和DB2中都存在的公司获取表matches
,如下所示:
现在,我想将DB1和DB2加入names
,即将其列附加到匹配项中,但仅适用于在匹配项中显示的公司。
因此,我想使用matches
等同于DB1 ['names'](即,将matches['left_side']
值等同于DB1的行附加到matches
的每一行等于DB1['names']
)和matches['left_side']
中的值,等同于DB2中的DB2 ['names']。 (即,将matches['right_side']
的值等同于matches
中的值添加到DB2中的每一行,例如DB2['names']
)
我该怎么做?
我还认为可能需要重命名DB2 ['names'],因为否则生成的联接表将具有来自DB1 ['names']和DB2 ['names']的同名列?
编辑:很高兴在必要时使用SQL代替熊猫
答案 0 :(得分:1)
import pandas as pd
df_db1 = ...
df_db2 = ...
df_matches = ...
# merge matches with db1 and specify the columns you want to use as key
df_matches = df_matches.reset_index().merge(df_db1, left_on=['left_side'], right_on=['names'], how="left", suffixes=["matches_", "db1_"]).set_index("index")
# merge matches (already matched with db1) again with db2 and specify the new columns you want to use as key
df_matches = df_matches.reset_index().merge(df_db2, left_on=['right_side'], right_on=['names'], how="left", suffixes=["matches_", "db2_"]).set_index("index")
。reset_index()
... .set_index("index")
部分将保留df_matches的初始索引,否则将被重置。
此外,您不必事先重命名列,因为您可以像这样使用suffixes
参数:suffixes=["matches_", "db1_"]
,如果有2个同名列,则会自动重命名列。 / p>
还请记住,如果df_db1或df_db2的密钥都为duplicates
,则在新的df_match中也将同时具有这两个密钥。如果您不希望这样做,则必须在此之前进行重复管理。