Nad*_*mir 8 python sorting multi-index pandas
我现在正在大学学习数据挖掘课程,但我对多索引排序问题感到有点困惑.
实际数据涉及大约100万部电影评论,我试图根据美国邮政编码分析,但为了测试如何做我想要的,我一直在使用随机生成的250个更小的数据集10个电影的评级,而不是邮政编码,我正在使用年龄组.
所以这就是我现在所拥有的,它是Pandas中的多索引DataFrame,有两个级别,'group'和'title'
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
... ...
Run Code Online (Sandbox Code Playgroud)
我的目标是根据他们在小组中的评分对标题进行排序(并且只显示每组中最受欢迎的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
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?我已经尝试过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
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似这样的东西:Pandas中的多索引排序,但不是基于另一个级别进行排序,我想根据值进行排序.有点像,如果那个人想根据他的销售专栏排序.
谢谢!
您正在寻找排序:
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
Run Code Online (Sandbox Code Playgroud)
笔记; 这可以就地工作(即修改 s),以返回副本使用顺序:
In [14]: s.order()
Out[14]:
1 3 1
2 1 2
1 1 3
dtype: int64
Run Code Online (Sandbox Code Playgroud)
更新:我意识到你实际上在问什么,我认为这应该是 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
Run Code Online (Sandbox Code Playgroud)
注意:之后您可以将级别名称设置为[无,无]。
| 归档时间: |
|
| 查看次数: |
3842 次 |
| 最近记录: |