8

我现在正在大学学习数据挖掘课程,但我有点卡在多索引排序问题上。

实际数据涉及大约 100 万条电影评论,我正在尝试根据美国邮政编码对其进行分析,但为了测试如何做我想做的事情,我一直在使用一个小得多的 250 个随机生成的数据集10 部电影的评分,而不是邮政编码,我使用的是年龄组。

所以这就是我现在所拥有的,它是 Pandas 中的多索引 DataFrame,有两个级别,“组”和“标题”

                        rating
group       title   
            Alien       4.000000
            Argo        2.166667
Adults      Ben-Hur     3.666667
            Gandhi      3.200000
            ...         ...

            Alien       3.000000
            Argo        3.750000
Coeds       Ben-Hur     3.000000
            Gandhi      2.833333
            ...         ...

            Alien       2.500000
            Argo        2.750000
Kids        Ben-Hur     3.000000
            Gandhi      3.200000
            ...         ...

我的目标是根据组内的评分对标题进行排序(并且只显示每个组中最受欢迎的 5 个左右的标题)

所以像这样(但我只会在每组中显示两个标题):

                        rating
group       title   
            Alien       4.000000
Adults      Ben-Hur     3.666667

            Argo        3.750000
Coeds       Alien       3.000000

            Gandhi      3.200000
Kids        Ben-Hur     3.000000

有人知道怎么做吗?我尝试过 sort_order、sort_index 等并交换级别,但它们也混淆了组。所以它看起来像:

                          rating
group         title 
Adults        Alien      4.000000
Coeds         Argo       3.750000
Adults        Ben-Hur    3.666667
Kids          Gandhi     3.666667
Coeds         Alien      3.000000
Kids          Ben-Hur    3.000000

我正在寻找这样的东西:Pandas 中的多索引排序,但不是基于另一个级别进行排序,而是我想根据值进行排序。有点像那个人想根据他的销售列进行排序。

谢谢!

4

1 回答 1

2

您正在寻找排序

In [11]: s = pd.Series([3, 1, 2], [[1, 1, 2], [1, 3, 1]])

In [12]: s.sort()

In [13]: s
Out[13]: 
1  3    1
2  1    2
1  1    3
dtype: int64

笔记; 这在原地工作(即修改 s),返回一个复制使用顺序

In [14]: s.order()
Out[14]: 
1  3    1
2  1    2
1  1    3
dtype: int64

更新:我意识到你实际上在问什么,我认为这应该是 sortlevels 中的一个选项,但现在我认为你必须重置索引、groupby 和应用:

In [21]: s.reset_index(name='s').groupby('level_0').apply(lambda s: s.sort('s')).set_index(['level_0', 'level_1'])['s']
Out[21]: 
level_0  level_1
1        3          1
         1          3
2        1          2
Name: 0, dtype: int64

注意:您可以在之后将级别名称设置为 [None, None]。

于 2013-12-06T00:39:45.320 回答