按一级 MultiIndex 对 pandas DataFrame 进行排序

Posted

技术标签:

【中文标题】按一级 MultiIndex 对 pandas DataFrame 进行排序【英文标题】:Sorting a pandas DataFrame by one level of a MultiIndex 【发布时间】:2016-12-01 15:49:09 【问题描述】:

我有一个 MultiIndexed pandas DataFrame,需要由其中一个索引器进行排序。这是数据的sn-p:

gene                      VIM  
treatment dose time            
TGFb      0.1  2    -0.158406  
          1    2     0.039158  
          10   2    -0.052608  
          0.1  24    0.157153  
          1    24    0.206030  
          10   24    0.132580  
          0.1  48   -0.144209  
          1    48   -0.093910  
          10   48   -0.166819  
          0.1  6     0.097548  
          1    6     0.026664  
          10   6    -0.008032  

我希望对数据进行排序,以便时间索引按升序排列。我的第一个想法是使用pandas.sort_values,但这似乎不适用于索引。有人知道这样做的方法吗?谢谢

【问题讨论】:

【参考方案1】:

使用sort_index 指定level

df.sort_index(level=2)

或者

df.sort_index(level=-1)

或者

df.sort_index(level='time')

所有产量:

【讨论】:

对于我的情况,我发现我需要添加 sort_remaining=False 以保留后续级别的顺序(在 OP 的情况下,想象在您想要保留其顺序的 time 之后有另一个索引列)

以上是关于按一级 MultiIndex 对 pandas DataFrame 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas MultiIndex DataFrame 中按级别求和列

为啥在具有一级索引的 MultiIndex 列的 pandas DataFrame 中表现不同?

pandas 与 MultiIndex 合并,当只有一级索引用作键时

对包含 str 和元组的 Pandas MultiIndex 进行排序

Pandas:修改特定级别的 Multiindex

如何使用 pandas multiIndex 查询多列