熊猫将多索引dafaframe的索引重置为日期值,并将其他索引转换为列

时间:2020-07-28 10:30:06

标签: python pandas dataframe datetime

我有一个多索引数据帧,如下所示:

                                                                   number
location                   category         created_on  
Arab Republic of Egypt      ACCESS          2018-06-25 00:00:00        4
                            ACCOUNT         2018-04-24 04:00:00        3
                                            2018-05-31 04:00:00        3
                                            2018-06-28 00:00:00        3
                        ACTIVE DIRECTORY    2018-04-01 00:00:00        3
... ... ... ...
United States of America    WINDOWS 10      2018-09-25 04:00:00        8
                                            2018-09-25 08:00:00       13
                                            2018-09-26 08:00:00       12
                                            2018-09-27 08:00:00        8
                                            2018-09-27 12:00:00        9

我想将其隐藏在以date列为索引的数据框中,但又不丢失列号中的计数,新的dataframe应该是这样的:

created_on              number       category       location
2018-06-25 00:00:00          4       ACCESS         Arab Republic of Egypt
2018-04-24 04:00:00          3       ACCOUNT        Arab Republic of Egypt
2018-05-31 04:00:00          3       ACCOUNT        Arab Republic of Egypt
2018-06-28 00:00:00          3       ACCOUNT        Arab Republic of Egypt
2018-04-01 00:00:00          3  ACTIVE DIRECTORY    Arab Republic of Egypt     
... ... ... ...
2018-09-25 04:00:00          8     WINDOWS 10       United States of America
2018-09-25 08:00:00         13     WINDOWS 10       United States of America
2018-09-26 08:00:00         12     WINDOWS 10       United States of America
2018-09-27 08:00:00          8     WINDOWS 10       United States of America
2018-09-27 12:00:00          9     WINDOWS 10       United States of America

我该怎么做?

1 个答案:

答案 0 :(得分:1)

在级别swaplevel0上使用2,然后在级别reset_index1上使用2

df1 = df.swaplevel(0, 2).reset_index(level=[1, 2])

另一个想法是先使用reset_index,然后在列set_index上使用created_at

df1 = df.reset_index().set_index('created_on')

结果:

print(df1)
                             category                  location  number
created_on                                                             
2018-06-25 00:00:00            ACCESS    Arab Republic of Egypt       4
2018-04-24 04:00:00           ACCOUNT    Arab Republic of Egypt       3
2018-05-31 04:00:00           ACCOUNT    Arab Republic of Egypt       3
2018-06-28 00:00:00           ACCOUNT    Arab Republic of Egypt       3
2018-04-01 00:00:00  ACTIVE DIRECTORY    Arab Republic of Egypt       3
...
2018-09-25 04:00:00        WINDOWS 10  United States of America       8
2018-09-25 08:00:00        WINDOWS 10  United States of America      13
2018-09-26 08:00:00        WINDOWS 10  United States of America      12
2018-09-27 08:00:00        WINDOWS 10  United States of America       8
2018-09-27 12:00:00        WINDOWS 10  United States of America       9