熊猫离开加入到位

时间:2018-06-14 03:17:38

标签: python pandas merge left-join

我有一个大数据框df和一个包含2列df_righta的小数据框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 个答案:

答案 0 :(得分:2)

你快到了。 有4个案例需要考虑:

  1. dfdf_right 都没有重复的密钥
  2. 只有df 重复的密钥
  3. 只有df_right 重复的密钥
  4. dfdf_right 都有重复的密钥
  5. 您的代码在案例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

    希望这有帮助。