Pandas Merge - 如何避免重复列

新手上路,请多包涵

我正在尝试合并两个数据框。每个数据框都有两个索引级别(日期、时间点)。例如,在列中,某些列在两者之间匹配(货币、调整日期)。

按索引合并这些的最佳方法是什么,但不要获取货币和调整日期的两份副本。

每个数据框都是 90 列,所以我尽量避免手写所有内容。

 df:                 currency  adj_date   data_col1 ...
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45
...

df2:                currency  adj_date   data_col2 ...
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45
...

如果我做:

 dfNew = merge(df, df2, left_index=True, right_index=True, how='outer')

我得到

dfNew:              currency_x  adj_date_x   data_col2 ... currency_y adj_date_y
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45             USD         2012-01-03

谢谢! …

原文由 user1911092 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

您可以计算出仅在一个 DataFrame 中的列,并使用它来选择合并中的列子集。

 cols_to_use = df2.columns.difference(df.columns)

然后执行合并(注意这是一个索引对象,但它有一个方便的 tolist() 方法)。

 dfNew = merge(df, df2[cols_to_use], left_index=True, right_index=True, how='outer')

这将避免任何列在合并中发生冲突。

原文由 EdChum 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在 --- 中使用 --- .merge() suffixes 选项:

 dfNew = df.merge(df2, left_index=True, right_index=True,
                 how='outer', suffixes=('', '_y'))

dfNew.drop(dfNew.filter(regex='_y$').columns, axis=1, inplace=True)

谢谢@ijoseph

原文由 rprog 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题