【问题标题】: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()?

【问题讨论】:

    标签: python pandas merge left-join


    【解决方案1】:

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

    1. dfdf_right 没有有重复的键
    2. 只有df重复键
    3. 只有df_right重复键
    4. 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?
    猜你喜欢
    • 2014-03-26
    • 2016-11-25
    • 1970-01-01
    • 2014-09-21
    • 2020-12-06
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多