我有一个数据帧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具有非唯一的多索引。我想以一种可以处理非唯一性的方式来合并两个df,并将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,但该解决方案对我不起作用
答案 0 :(得分:1)
您也可以使用重复的索引为DataFrame重新索引,它只会重复相应的行。
In [11]: df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['X', 'Y', 'Z'], index=pd.MultiIndex.from_product([[1], [1,2,3]]))
Out[12]:
X Y Z
1 1 1 2 3
2 4 5 6
3 7 8 9
In [15]: df.loc[pd.MultiIndex.from_product([[1], [1,2,1,2]]), :]
Out[15]:
X Y Z
1 1 1 2 3
2 4 5 6
1 1 2 3
2 4 5 6