【问题标题】:Merge dataframes with duplicate keys合并具有重复键的数据框
【发布时间】:2020-11-04 19:08:38
【问题描述】:

我有一个格式为 df1 的数据框:

df1:

      a   b  
1     x   bb
2     y   ba

我想将它与另一个具有多行的数据框 df2 合并,其中列“a”与 df1 的索引匹配:

df2:

      a   c   d   e
1     1   cc  dd  ee
2     1   cd  de  ef
3     1   dd  ef  ff
4     2   ff  fg  fh
5     2   fg  fh  ff

我尝试合并,但 df1 有很多重复项,如下所示:

      a   b   c   d   e
1     x   bb  cc  dd  ee
1     x   bb  cd  de  ef
1     x   bb  dd  ef  ff

2     y   ba  ff  fg  fh
2     y   ba  fg  fh  ff

我怎样才能合并它们来实现这样的目标:

      a   b   c   d   e
1     x   bb  cc  dd  ee
              cd  de  ef
              dd  ef  ff

2     y   ba  ff  fg  fh
              fg  fh  ff

我阅读了有关堆叠的信息,但我真的不想拥有多个索引。任何帮助将不胜感激!

【问题讨论】:

  • 索引编号重要吗?
  • 我刚刚意识到由于您的问题,我实际上在描述中犯了一个错误。 df2["a"] 实际上是指 df1 的索引。所以是的,你可以说索引很重要。我尝试了您的解决方案,但没有一个对我有用。

标签: python pandas dataframe


【解决方案1】:

您可以使用pd.merge 方法合并这两个数据框。我假设你想广播b 的值。否则请为b 提供填充值。

如果您想让ab 列作为MultiIndex 的一部分并保留df1 的索引编号,请像这样合并数据框:

df_new = pd.merge(df1.reset_index(), df2).set_index(['index', 'a', 'b'])

如果要将ab 保留为列,请像这样合并数据框:

df_new = pd.merge(df1.reset_index(), df2).set_index('index')

【讨论】:

  • 其实我不想广播b的值。如果可能的话,我只想要他们一次。在我的结果中,如果有帮助,第 2 行和第 3 行应该是索引号为 1 的行的一部分。
猜你喜欢
  • 2022-11-25
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多