熊猫留在原地加入

Posted

技术标签:

【中文标题】熊猫留在原地加入【英文标题】:Pandas left join in place 【发布时间】:2018-11-23 17:40:28 【问题描述】:

我有一个大数据框df 和一个小数据框df_right,有两列ab。我想在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()?

【问题讨论】:

【参考方案1】:

你快到了。 有 4 种情况需要考虑:

    dfdf_right 没有有重复的键 只有df重复键 只有df_right重复键 dfdf_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

或者,如果df_right 的列'b' 包含数值并且您希望获得汇总统计:

dtmp = pd.merge(df[['a']], df_right.groupby('a').mean().reset_index(drop=False), on='a', how='left')
df['b'] = dtmp['b'].values

【讨论】:

这正是我所需要的,有没有办法只在从 df_right 到 df 的列子集中填充 na?

以上是关于熊猫留在原地加入的主要内容,如果未能解决你的问题,请参考以下文章

加入带有日期范围的熊猫时间序列

熊猫在日期时间之间离开加入

不平等加入熊猫?

加入两个熊猫数据框

如何在熊猫中自行加入df?

根据列值加入熊猫数据框