Python 熊猫多索引重组数据帧

Python 熊猫多索引重组数据帧,python,pandas,multi-index,Python,Pandas,Multi Index,在完成DataFrame的分组过程后,我以这种方式构建了表: sum count endAt id 2021-01-02 628 100.0 1 2021-01-03 628 300.0 1 2021-01-06 32 100.0 1 2021-01-07 629 50.0 1 2021-01-08 619 150.0 2 ... ... ... ... 2021-04-22 860 100.0

在完成DataFrame的分组过程后,我以这种方式构建了表:

                sum     count
endAt       id      
2021-01-02  628 100.0   1
2021-01-03  628 300.0   1
2021-01-06  32  100.0   1
2021-01-07  629 50.0    1
2021-01-08  619 150.0   2
... ... ... ...
2021-04-22  860 100.0   2
            861 150.0   2
            869 350.0   6
            876 100.0   1
            883 200.0   4
尝试透视表,但仍无法对结构重新编制索引。 是一种使用以下索引重新构造数据帧的方法:

colums = pd.MultiIndex.from_product([['2021-01-01', '2021-01-02', ....],['sum','count']], names=['date','types'])
index = pd.MltiIndex.from_product([32,619,628,....],names=['id'])
并将数据帧结构化为:

id      endAt       2021-01-02  2021-01-02
                    sum count   sum count
32                  100 1       200 2
619                 0   0       100 1
628                 300 3       0   0
...........
883                 100 1       200 2
我认为您需要按第一个级别,然后在
多索引中交换级别和排序:

df = df.unstack(level=0, fill_value=0).swaplevel(1,0, axis=1).sort_index(axis=1)
print (df)
endAt 2021-01-02        2021-01-03        2021-01-06        2021-01-07        \
           count    sum      count    sum      count    sum      count   sum   
id                                                                             
32             0    0.0          0    0.0          1  100.0          0   0.0   
619            0    0.0          0    0.0          0    0.0          0   0.0   
628            1  100.0          1  300.0          0    0.0          0   0.0   
629            0    0.0          0    0.0          0    0.0          1  50.0   

endAt 2021-01-08         
           count    sum  
id                       
32             0    0.0  
619            2  150.0  
628            0    0.0  
629            0    0.0  
样本数据:

d = {'sum': {('2021-01-02', 628): 100.0, ('2021-01-03', 628): 300.0, ('2021-01-06', 32): 100.0, ('2021-01-07', 629): 50.0, ('2021-01-08', 619): 150.0}, 'count': {('2021-01-02', 628): 1, ('2021-01-03', 628): 1, ('2021-01-06', 32): 1, ('2021-01-07', 629): 1, ('2021-01-08', 619): 2}}

df = pd.DataFrame(d).rename_axis(['endAt','id'])
print (df)
                  sum  count
endAt      id               
2021-01-02 628  100.0      1
2021-01-03 628  300.0      1
2021-01-06 32   100.0      1
2021-01-07 629   50.0      1
2021-01-08 619  150.0      2

非常感谢。是的,我在玩unstack。不幸的是,swaplevel返回了错误“意外的参数轴”(这对我来说很奇怪)。您能告诉我您是如何初始化df的吗?@OcMaRUS-添加到答案中。!非常感谢。是的,正是我们所需要的。现在,我必须找出我的df有什么问题,因为您的过程不适用于。@OcMaRUS-只有
“意外参数轴”
错误?也许可以试试熊猫。非常感谢你的时间和想法!!是的,我得到了结果!问题在于索引不正确。设置正确的多索引df和last非常重要。排序索引-也非常重要!