我有两个数据帧,结构类似
# 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"