当前位置:  开发笔记 > 编程语言 > 正文

排序大熊猫MultiIndex

如何解决《排序大熊猫MultiIndex》经验,为你挑选了1个好方法。

我通过使用另一个数据框创建了一个具有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排序,以便所有功能(切片等)都能正常工作?



1> joris..:

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

df = df.sort_index(level=0)

但是,如果您的熊猫较旧(<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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有