用非唯一的多索引合并多索引数据框

时间:2020-07-01 08:27:59

标签: python pandas dataframe concatenation multi-index

我有一个数据帧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,但该解决方案对我不起作用

1 个答案:

答案 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