【问题标题】:pandas merge dataframes on certain columns but exclude them in the result dataframepandas 在某些列上合并数据框,但在结果数据框中排除它们
【发布时间】:2018-04-05 10:41:04
【问题描述】:

pandas 中,我必须包含某些我想合并两个dataframes 的列,

result = df_a.merge(df_b[['A', 'B', 'C']], how='left', on=['A', 'B'])

所以如果我想在 AB 列上合并 df_adf_b,我还必须在 result dataframe 中包含 AB,但是我真正想要的只是列C。我想知道是否有办法只在merge 中包含C

合并后的示例结果数据框,

year_x    code_x    year_y    code_y    id
2000      005       2000.00   005       1
2001      006       2001.00   006       2
2002      007       2002.00   007       3

df_adf_b 都包含yearcode,我只需要df_b 中的id,但我必须在codeyear 上使用merge

最初yeardf_adf_b 中都是int64 dtype,但在合并后year_y 变成了float,这也令人困惑。

如果我在merge之后dropcode_yyear_y,我可能不得不将renamecode_xyear_xcodeyear,如果我可以首先消除重复的列。

【问题讨论】:

  • 合并后为什么不drop
  • @Wen 想知道是否可以在 merge 中完成合并后无需进行一些清理。
  • 你能添加示例数据框吗
  • 之前有很多这样的问题,通常使用合并或查询后删除。如果您添加示例数据,我们可以想到更好的替代方案
  • 这会有帮助吗? df1[['code','year','id']].merge(df2[['code','year']])['id']

标签: python-3.x pandas dataframe merge


【解决方案1】:

如果你只需要结果框中的一列:

result = df_a.merge(df_b[['A', 'B', 'C']], how='left', on=['A', 'B'])['C']

至于您更改的dtypes,至少在您提供的示例数据中,您的year_xyear_y 是不同的类型,一种是int,一种是float,这意味着结果列将是float

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2021-12-24
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多