Pandas multiindex在sort\u index方法之后未排序

2024-04-23 17:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的数据帧的头

            McDonald's  Python  CSS  Microsoft Office        day  week day
Jour                                                                      
2017-06-11          87      22   12                31     Sunday         6
2017-06-12          63      38   24                55     Monday         0
2017-06-13          63      41   25                56    Tuesday         1
2017-06-14          73      41   25                55  Wednesday         2
2017-06-15          72      39   24                53   Thursday         3

我对数据帧执行了groupby操作,得到:

df_week = df.groupby(["day", "week day"]).mean()
df_week

                    McDonald's     Python        CSS  Microsoft Office
day       week day                                                    
Friday    4          76.076923  36.615385  22.384615         51.769231
Monday    0          68.230769  37.000000  22.230769         54.230769
Saturday  5          87.416667  21.500000  11.416667         30.750000
Sunday    6          90.000000  21.615385  11.000000         30.538462
Thursday  3          69.923077  40.076923  24.615385         55.846154
Tuesday   1          66.230769  39.461538  24.153846         57.000000
Wednesday 2          68.923077  40.000000  24.846154         56.538462

然后我使用工作日索引对数据帧进行排序。你知道吗

df_week.sort_index(level="week day", inplace=True)

最后,数据帧看起来排序良好:

                    McDonald's     Python        CSS  Microsoft Office
day       week day                                                    
Monday    0          68.230769  37.000000  22.230769         54.230769
Tuesday   1          66.230769  39.461538  24.153846         57.000000
Wednesday 2          68.923077  40.000000  24.846154         56.538462
Thursday  3          69.923077  40.076923  24.615385         55.846154
Friday    4          76.076923  36.615385  22.384615         51.769231
Saturday  5          87.416667  21.500000  11.416667         30.750000
Sunday    6          90.000000  21.615385  11.000000         30.538462

但是现在,如果我尝试使用索引值,它们仍然没有排序:

print(df_week.index.levels[0])
print(df_week.index.levels[1])

Index(['Friday', 'Monday', 'Saturday', 'Sunday', 'Thursday', 'Tuesday',
       'Wednesday'],
      dtype='object', name='day')
Int64Index([0, 1, 2, 3, 4, 5, 6], dtype='int64', name='week day')

如果我查看整个MultiIndex对象,很明显,索引标签和索引行是分开存储的。你知道吗

MultiIndex(levels=[['Friday', 'Monday', 'Saturday', 'Sunday', 'Thursday', 'Tuesday', 'Wednesday'], [0, 1, 2, 3, 4, 5, 6]],
           labels=[[1, 5, 6, 4, 0, 2, 3], [0, 1, 2, 3, 4, 5, 6]],
           names=['day', 'week day'])

因此,如何以正确的顺序访问索引值?你知道吗


Tags: 数据dfcssmicrosoftofficeweekmondayday
1条回答
网友
1楼 · 发布于 2024-04-23 17:43:43

这是因为multiindex levels是一个frozenlist总是显得被排序并且它们持有引用。所以如果你想要这个顺序,就把它们从frozenlist转换成list。i、 e如果您使用df.index.tolist(),您可以看到基于数据帧的实际顺序。i、 电子

df.index.tolist()

[('Monday', 0),
 ('Tuesday', 1),
 ('Wednesday', 2),
 ('Thursday', 3),
 ('Friday', 4),
 ('Saturday', 5),
 ('Sunday', 6)]

相关问题 更多 >