熊猫留在原地加入
Posted
技术标签:
【中文标题】熊猫留在原地加入【英文标题】:Pandas left join in place 【发布时间】:2018-11-23 17:40:28 【问题描述】:我有一个大数据框df
和一个小数据框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()?
【问题讨论】:
【参考方案1】:你快到了。 有 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
或者,如果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?以上是关于熊猫留在原地加入的主要内容,如果未能解决你的问题,请参考以下文章