【发布时间】:2020-10-21 15:47:29
【问题描述】:
我有一个数据框 dfa:
y X1 X2 X3
Company Period
1 1 1 2 3 4
2 3 4 5 6
3 3 6 5 6
2 1 1 2 3 4
2 3 4 5 6
3 7 8 9 10
...
和 dfb
Company Period
1 1
2
3
7 1
2
3
1 1
2
3
...
如您所见,dfb 有一个非唯一的多索引。我想以一种可以处理非唯一性的方式连接两个 dfs,并将 dfa 的值添加到索引相等的任何地方的 dfb 中。所以想要的结果应该是这样的:
y X1 X2 X3
Company Period
1 1 1 2 3 4
2 3 4 5 6
3 3 6 5 6
7 1 1 2 3 4
2 1 5 5 6
3 1 6 8 9
1 1 1 2 3 4
2 3 4 5 6
3 3 6 5 6
...
我尝试了以下方法:
dfb.join(dfa, how='left') #results in dfb
dfb = pd.concat([dfb, dfa], axis = 1, join = 'inner') #raises: ValueError: cannot handle a non-unique multi-index!
bs_df.merge(dfa.reset_index(), left_on=['Company', 'PeriodQ'], right_on=['Company', 'PeriodQ'], how='left') #results in dfb
我做错了什么?
我看到了类似的问题here,但解决方案对我不起作用
【问题讨论】:
-
dfb是一个 DataFrame 还是一个 Multiindex?在后一种情况下,您不必加入,但dfa.loc[dfb, :]应该可以解决问题。 -
这是一个数据框,但我可以只使用多索引。但是您的解决方案是否会导致多次出现例如在我上面的例子中 id 1?
-
我刚刚尝试了您的方法,它似乎可以正常工作。谢谢!你想创建一个答案而不是我将其标记为正确的答案
标签: python pandas dataframe concatenation multi-index