为 pandas 数据框操作多索引

数据挖掘 Python 熊猫
2022-02-21 04:29:06

我有一个带有多索引的熊猫数据框。我对此有几个问题。

指数是周数(38 到 42)和每周的星期几(DOW)。所以看起来像

在此处输入图像描述

问题是第 2 级索引,即 DofWeek,是按字典顺序自动排序的。但我想要通常的工作日排序,即第 39 周,我希望它显示为星期一、星期二、星期三、星期四、星期五、星期六和星期日,而不是按照它们出现的顺序。所以当我绘制它时,它看起来是这样的: 在此处输入图像描述

我希望它出现在通常的星期一、星期二、星期三等。我尝试过重新索引,但它没有用。这是我的第一个问题

我的第二个问题是关于查询此类数据框。例如,当我这样做时dataframe.query('DofWeek == 'Saturday'),它会抛出一个错误说Saturday is not defined但是,如果我交换级别然后查询,它会起作用。例如dataframe.swaplevel().query('weekNum == 39'),它完美地工作。据我所知,应该对多指数进行排序,以使某些方法起作用。但就我而言,他们是。那为什么它不起作用。

任何帮助将不胜感激。

谢谢。

1个回答

订购

您可以通过将数据类型更改为有序分类来实现此目的:

df['DofWeek'] = pd.Categorical(
                df['DofWeek'], 
                categories=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'], 
                ordered=True)

然后对索引进行排序:

df = df.sort_index()

错误

问题dataframe.query('DofWeek == 'Saturday')是糟糕的报价封装。你可以用例如解决它'DofWeek == "Saturday"'