在保留结构的同时划分2个多索引数据帧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在保留结构的同时划分2个多索引数据帧相关的知识,希望对你有一定的参考价值。

我有2个MultiIndex数据帧

第一个看起来像这样:

v                         40                ...           200                      
                 p1       p2         p3     ...      p2        p3       p4
dates                                       ...                                
2019-12-01  0.031827  0.030943    0.027203  ...  0.014557    0.012797  0.010334
2019-12-02  0.027271  0.024006    0.022646  ...  0.011294    0.010654  0.010174

.to_dict()->

A = 
{
  (43, 'p1'): 
     {
       '2019-12-01': 0.0318271824, 
       '2019-12-02': 0.0272707268, 
     }, 
  (43, 'p2'): 
     {
       ( ... )
      }, 
  (43, 'p3'): 
      {
        ( ... )
      }, 
  (210, 'p1'): 
      {
         ( ... ) 
       }
}

第二个看起来像这样:

           section1                 section2  ... section3  section3                  
                p1   p2   p3   p4    p1     ...   p4      p1   p2   p3   p4
dates                                       ...                                 
2019-12-01  22.00  0.03  0.03  0.03  0.111  ...  0.03     0.03  0.03  0.03  0.03
2019-12-02   0.03  0.03  1.00  0.03  0.030  ...  0.03     0.03  0.03  0.03  0.03

.to_dict()->

B = 
{
  ('section1', 'p1'): 
     {
       '2019-12-01': '22', 
       '2019-12-02': '0.03', 
     }, 
  ('section1', 'p2'): 
     {
       ( ... )  
     }, 
}

[我想将这两个数据帧一起分割(A / B),并返回与A相同的结构。因此:

v                         40                                     ...           200                      
                   p1               p2               p3                 ...      p2        p3       p4
dates                                                            ...                                
2019-12-01  0.031827 / 22.00   0.030943 / 0.03   0.027203 / 0.03  ...  0.014557    0.012797  0.010334
2019-12-02  0.027271  0.024006    0.022646       ...  0.011294    0.010654  0.010174

我正在尝试尽快处理数据...

**编辑

为了更清楚一点,我想创建一个将A除以B并保持A的结构的数据框... i.E:

 A = {
        (43, 'p1'): 
             {
               '2019-12-01': 0.0318271824
             }, 
        (210, 'p1'): 
              {
                 '2019-12-01': 0.0318271824
               }
   }

B = {
        ('section1', 'p1'): 
             {
               '2019-12-01': '22', 
             }, 
        ('section1', 'p2'): 
            {
                 '2019-12-01': '22'
            }, 
    }

C = {
        (43, 'p1'): 
             {
               '2019-12-01': 22 / 0.0318271824
             }, 
        (210, 'p1'): 
              {
                 '2019-12-01': 22 / 0.0318271824
               }
   }
答案

我已经尝试过:

A.droplevel(0, 1).iloc[:, 0:].truediv(B.astype(float).droplevel(0, 1), axis=0)

唯一的问题是我失去了顶级索引,以及整体结构:

                 p1       p1       p1  ...       p4       p4       p4
dates                                     ...                              
2019-12-01  0.001447  0.286731  1.060906  ...  0.344460  0.344460  0.344460
2019-12-02  0.909024  0.909024  0.909024  ...  0.339128  0.339128  0.339128

以上是关于在保留结构的同时划分2个多索引数据帧的主要内容,如果未能解决你的问题,请参考以下文章

分配多索引列,同时保留索引级别值的顺序

使用多索引上的条件选择数据帧的子集

DataFrameGroupBy 使用多索引选择子集

拆垛一个多指标熊猫数据帧,同时保持相同的列

Pandas:在多索引数据帧中重新索引和插值

pandas.concat:无法处理非唯一的多索引!熊猫蟒