【问题标题】:Joining a single-index dataframe to a multi-index dataframe将单索引数据帧连接到多索引数据帧
【发布时间】:2021-01-12 06:40:58
【问题描述】:

我有两个数据框,结构类似于

# df1
                        data1   data2
id      feature_count   
12345   1               111     888
        2               222     999
        3               333     101010
45678   0               444     111111
        2               555     121212
        3               666     131313
        4               777     141414

# df2
        descriptor
id
12345   "foo"
45678   "bar"

基于this solution,我似乎应该能够简单地执行df1.join(df2) 以获得所需的结果

#joined
                        data1   data2   descriptor
id      feature_count   
12345   1               111     888     "foo"
        2               222     999     "foo"
        3               333     101010  "foo"
45678   0               444     111111  "bar"
        2               555     121212  "bar"
        3               666     131313  "bar"
        4               777     141414  "bar"

但是,我实际得到的是 Pandas 1.0.5 中的NotImplementedError: Index._join_level on non-unique index is not implemented

这似乎不应该很复杂,但我显然误解了一些东西。我正在寻找的只是将df2 中的唯一映射列附加到df1 的(保证现有映射)第一个索引上。

【问题讨论】:

  • 我无法复制您的错误。我也有 1.0.5 版。您的示例代码对我有用。您的示例代码是否适合您,或者您是否在较大的数据集上遇到错误?
  • 这是一个从 SQL 查询中提取的更大的数据集。在我接受答案后(事实证明,另一个错误提供了更多信息),我认为查询有意外重复(我很惊讶 Pandas 让我为其分配索引)。

标签: python python-3.x pandas dataframe


【解决方案1】:

由于您只需要映射一列,因此只需:

df1['descriptor'] = df1.index.get_level_values('id').map(df2['descriptor'])

一般情况下,您可以暂时重置其他索引,加入数据帧,然后将其重新设置:

df1.reset_index('feature_count').join(df2).set_index('feature_count', append=True)

输出:

                     data1   data2 descriptor
id    feature_count                          
12345 1                111     888      "foo"
      2                222     999      "foo"
      3                333  101010      "foo"
45678 0                444  111111      "bar"
      2                555  121212      "bar"
      3                666  131313      "bar"
      4                777  141414      "bar"

【讨论】:

  • 您的第一个案例仍然给我一个错误,但您的第二个案例就像一个魅力。谢谢!
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2019-11-02
  • 2022-12-17
  • 2019-08-12
  • 2021-01-28
相关资源
最近更新 更多