use*_*167 2 python merge left-join pandas
我有一个大数据框df和一个小数据框,df_right有 2 列a和b. 我想在a不复制的情况下进行简单的左连接/查找df。
我想出了这段代码,但我不确定它有多健壮:
dtmp = pd.merge(df[['a']], df_right, on = 'a', how = "left")  #one col left join
df['b'] = dtmp['b'].values
我知道当有重复的键时它肯定会失败:pandas left join - 为什么会有更多的结果?
有没有更好的方法来做到这一点?
有关的:
你快到了。有4种情况需要考虑:
df并df_right 没有有重复键df 具有重复键df_right 具有重复键df并df_right 已复制的钥匙您的代码在第 3 和第 4 种情况下失败,因为合并扩展了df. 为了使其工作,您需要在df_right合并之前选择要放入的信息。这样做的目的是将任何合并方案强制为情况 1 或 2。
例如,如果您希望为 中的每个重复键保留“第一个”值df_right,以下代码适用于上述所有 4 种情况。
dtmp = pd.merge(df[['a']], df_right.drop_duplicates('a', keep='first'), on='a', how='left')
df['b'] = dtmp['b'].values
或者,如果列'b'的df_right数值组成,你希望有汇总统计:
dtmp = pd.merge(df[['a']], df_right.groupby('a').mean().reset_index(drop=False), on='a', how='left')
df['b'] = dtmp['b'].values