我有一个大数据框df
和一个小数据框df_right
有 2 列a
and 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 - 为什么有更多结果?
有更好的方法吗?
Related:
在 pandas 中外部合并两个数据框
DataFrame.merge() 中 copy=False 的确切缺点是什么?
你快到了。
有 4 种情况需要考虑:
- Both
df
and df_right
do not有重复的键
- Only
df
has重复的键
- Only
df_right
has重复的键
- Both
df
and df_right
have重复的键
您的代码在情况 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'
of 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)