当前位置: 首页 > 面试题库 >

排序pandas MultiIndex

左丘兴生
2023-03-14
问题内容

我通过使用另一个数据框创建了一个具有MultiIndex的数据框:

arrays = [df['bus_uid'], df['bus_type'], df['type'],
          df['obj_uid'], df['datetime']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['bus_uid', 'bus_type', 'type',
                                                 'obj_uid', 'datetime'])
multindex_df = pd.DataFrame(df['val'].values, index=index)

如文档http://pandas.pydata.org/pandas-
docs/stable/advanced.html中
所述,此方法运行良好。

在文档中,该文档还说,在“需要使用MultiIndex进行排序”下,需要对标签进行排序以正确进行索引和切片功能。

但是不知何故

multindexed_df.sort_index(level=0)

要么

multindexed_df.sort_index(level='bus_uid')

不再起作用,并抛出 TypeError:sort_index()得到了意外的关键字参数’level’

sort_index() 上查找对象信息,看起来“ by”是我的新朋友,而不是“ levels”:

by:object
  Column name(s) in frame. Accepts a column name or a list for a nested sort. A tuple will be interpreted as the levels of a multi-index.

我的问题如下:如何对MultiIndex进行排序,以便所有功能(切片等)都能正常工作?


问题答案:

答案取决于您使用的pandas版本。对于 最新的pandas( > = 0.17.0),您确实可以使用level关键字来指定对多级索引进行排序

df = df.sort_index(level=0)

但是,如果您的 pandas较旧(<0.17.0),则此level关键字尚不可用,但是您可以使用以下sortlevel方法:

df = df.sortlevel(level=0)

但是请注意,如果要 对所有级别 进行 排序 ,则无需指定level关键字,您可以执行以下操作:

df = df.sort_index()

这将适用于最新版本和较旧版本的熊猫。

有关排序API中这些更改的摘要,请参见http://pandas.pydata.org/pandas-
docs/stable/whatsnew.html#changes-to-sorting-
api



 类似资料:
  • 本文向大家介绍PowerShell 排序:排序对象/排序,包括了PowerShell 排序:排序对象/排序的使用技巧和注意事项,需要的朋友参考一下 示例 按升序或降序对枚举进行排序 同义词: 假设: 升序排序是默认设置: 阿龙 阿龙 伯尼 查理· 丹尼 要请求降序排列: 丹尼· 查理 ·伯尼· 亚伦 ·亚伦 您可以使用表达式进行排序。 阿龙 阿龙 丹尼· 伯尼· 查理

  • 展示多条数据时,通常需要对数据按照用户指定的列进行排序。 Yii 使用 yii\data\Sort 对象来代表排序方案的有关信息。 特别地, attributes 指定 属性,数据按照其排序。 一个属性可以就是简单的一个 model attribute, 也可以是结合了多个 model 属性或者 DB 列的复合属性。下面将给出更多细节。 attributeOrders 给出每个属性当前设置的 排序

  • 基数排序 from typing import List def radix_sort(arr: List) -> List: """ 基础排序 核心思想: 一共有0-9为数字的桶,一共10个,一共循环数组中最大数的位数次(如最大数是1000则是4次个十百千位分别循环), 每一次循环依次从数中取出个、十、百、千、万...位数上的数值放到对应的桶中,如果该位上没有

  • 问题内容: 我正在尝试通过sequelize从数据库中输出所有对象列表,如下所示,并希望在我在where子句中添加id时对数据进行整理。 但是问题是渲染后,所有数据按如下进行整理。 正如我发现的那样,它既没有按ID也没有按名称排序。请帮我解决。 问题答案: 在序列化中,您可以轻松添加order by子句。 看看我如何添加对象数组? 编辑: 一旦在诺言中收到对象,您可能必须订购这些对象。查看有关根据

  • 本文向大家介绍JavaScript希尔排序、快速排序、归并排序算法,包括了JavaScript希尔排序、快速排序、归并排序算法的使用技巧和注意事项,需要的朋友参考一下 以var a = [4,2,6,3,1,9,5,7,8,0];为例子。 1.希尔排序。 希尔排序是在插入排序上面做的升级。是先跟距离较远的进行比较的一些方法。 过程输出: 由输出可以看到。第一轮间隔为5。依次对这些间隔的数组插入排序

  • 问题:Mergesort将一个数字列表分成两半,并对这两个数字进行递归调用。相反,您能在左半部分执行quicksort,在右半部分执行mergesort吗?如果是,则通过显示每个步骤来显示它将如何对下面的数字列表进行排序。如果没有,请解释为什么不能。 Iam应该使用MergeSort对数字列表进行排序。左半部分将使用快速排序进行排序? 我想出来了。安:是的,我们可以 使用mergeSort对数组的

  • 本文向大家介绍C#排序算法之堆排序,包括了C#排序算法之堆排序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现堆排序的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我试图理解插入排序和选择排序之间的区别。 它们似乎都有两个组成部分:未排序列表和排序列表。它们似乎都从未排序列表中提取一个元素,并将其放在排序列表的适当位置。我看到一些网站/书籍说选择排序通过一次交换一个来实现这一点,而插入排序只是找到合适的位置并插入它。但是,我看到其他文章说了些什么,说插入排序也交换。因此,我感到困惑。有任何规范的来源吗?