Python 熊猫多索引未按排序\索引方法排序
这是我的数据帧的头部Python 熊猫多索引未按排序\索引方法排序,python,pandas,indexing,Python,Pandas,Indexing,这是我的数据帧的头部 McDonald's Python CSS Microsoft Office day week day Jour 2017-06-11 87 22 12 31 Sunday 6 2017-06-12
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(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'])
因此,我如何才能以正确的顺序访问索引值?这是因为
多索引级别
是一个冻结列表
总是显示为已排序,并且它们保留引用。因此,如果您需要顺序,请将它们从frozenlist转换为list。i、 e如果使用df.index.tolist()
可以看到基于数据帧的实际顺序。i、 e
df.index.tolist()
[('Monday', 0),
('Tuesday', 1),
('Wednesday', 2),
('Thursday', 3),
('Friday', 4),
('Saturday', 5),
('Sunday', 6)]
如果您在某个特定级别上使用了tolist()
方法,则该方法不起作用。例如:df_week.index.levels[0].tolist()
返回无序列表。因此,您仍然需要从元组列表中提取所需的索引。