我有一个大数据框df
和一个包含2列df_right
和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 - why more results?
有更好的方法吗?
相关:
Outer merging two data frames in place in pandas
What are the exact downsides of copy=False in DataFrame.merge()?
答案 0 :(得分:2)
你快到了。 有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'
的{{1}}列由数值组成,并且您希望有摘要统计信息:
df_right
希望这有帮助。