仅在左侧行合并默认匹配的数据帧

时间:2017-05-01 06:03:21

标签: pandas dataframe left-join python-3.5

我有两个data frames,我希望通过UserId中存在的密钥合并它们。

但是,如果df1中的任何行df2中没有匹配的ID,我想设置一些默认的合并值,特别是df2[df2.UserId == 0],它始终存在于{{1} }}

我考虑过将左侧与指标合并,然后填充所有不匹配的行,但我不确定如何将df2的内容设置为这些行,而不是专门指定每一列。 / p>

df2

1 个答案:

答案 0 :(得分:0)

这最终对我有用:

res = df1.merge(df2, on=['UserId'], how='left', sort=False, indicator=True)

defaultDicts = [extractDefault(row, df2) for index, row in res.loc[res._merge == 'left_only'].iterrows()]
defaultPd = pd.DataFrame(defaultDicts)

res = res[res._merge == 'both']
res = res.append(defaultPd, ignore_index=False)[res.columns.tolist()]
res.drop('_merge', axis=1, inplace=True)

使用以下附加定义:

def extractDefault(resRow, df2):
    defaultRow = df2[df2.UserId == 0)].iloc[0]
    resDict = resRow.to_dict()
    defaultDict = defaultRow.to_dict()
    mergedDict = { **resDict, **defaultDict }
    return mergedDict