我有两个data frames
,我希望通过UserId
中存在的密钥合并它们。
但是,如果df1
中的任何行df2
中没有匹配的ID,我想设置一些默认的合并值,特别是df2[df2.UserId == 0]
,它始终存在于{{1} }}
我考虑过将左侧与指标合并,然后填充所有不匹配的行,但我不确定如何将df2
的内容设置为这些行,而不是专门指定每一列。 / p>
df2
答案 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