将单索引数据帧连接到多索引数据帧



我有两个数据帧,结构类似

# 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"

基于这个解决方案,我似乎可以简单地进行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的(保证现有映射(第一个索引上。

由于只需要映射一列,只需执行:

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"

最新更新