python - 数据框 sort_values 选项
问题描述
尝试安排数据框
genres = ['classic', 'pop', 'classic', 'classic', 'pop', 'pop', 'rock', 'rap' , 'k' , 'k']
plays = [500, 600, 150, 800, 2500, 700, 300, 10000, 300, 400]
import pandas as pd
df = pd.DataFrame({'genres' : genres,
'plays' : plays,
'num' : list(range(0,len(genres)))})
df
genres plays num
0 classic 500 0
1 pop 600 1
2 classic 150 2
3 classic 800 3
4 pop 2500 4
5 pop 700 5
6 rock 300 6
7 rap 10000 7
8 k 300 8
9 k 400 9
dfg = df.groupby('genres', as_index = False).sum().sort_values(by = 'plays' , ascending = False)
dfg
genres plays num
3 rap 10000 7
2 pop 3800 10
0 classic 1450 5
1 k 700 17
4 rock 300 6
dfg1 = df.sort_values(by=['genres','plays'],
ascending = [False, False]).groupby('genres').head(2)
dfg1
genres plays num
6 rock 300 6
7 rap 10000 7
4 pop 2500 4
5 pop 700 5
9 k 400 9
8 k 300 8
3 classic 800 3
0 classic 500 0
我想要的 dfg1 是按 dfg 中显示的每个流派总和的总和来安排的,并且在每个流派中我想要最大的 2 个播放值。
但是,上面显示的表格安排得有些奇怪,我猜安排是由只有 1 个播放值和 2 个或更多播放值的不同组完成的,因为“摇滚”和“说唱”总是在表格的顶部,并且在有 2 个或更多戏剧的流派之后
genres plays num
7 rap 10000 7
4 pop 2500 4
5 pop 700 5
3 classic 800 3
0 classic 500 0
9 k 400 9
8 k 300 8
6 rock 300 6
上面是我想要的表格,排列是由每组的总和完成的,并且在每组中我想要2个最大的播放值。
任何人都可以帮忙吗?
解决方案
用于df.merge
符合您要排序的顺序:
In [773]: x = df.groupby('genres')['plays'].nlargest(2).reset_index()
In [779]: dfg1 = dfg.merge(x, on='genres')[['genres', 'plays_y', 'level_1']].rename(columns={'level_1':'num', 'plays_y': 'plays'})
In [780]: dfg1
Out[780]:
genres plays num
0 rap 10000 7
1 pop 2500 4
2 pop 700 5
3 classic 800 3
4 classic 500 0
5 k 400 9
6 k 300 8
7 rock 300 6
推荐阅读
- php - 多个数据集到谷歌图表
- mysql - 如何在 WordPress 中加入空的用户元?
- android - 列表未添加到android中的arraylist
- ios - 显示 Invalid Binary Xcode 11 beta 6 的 iOS 应用
- typescript - 抑制打字稿编译中的 ERRNO 2 错误
- ionic-framework - 是否有任何离子代码可以使用 ionic 3 在蓝牙打印机上打印条码
- r - 从 mutate 中的符号创建列(整洁的评估)
- javascript - jQuery 不选择元素(Wordpress)
- java - 在 spring 和 eclipse 中演示微服务不起作用
- java - 可以在 BCrypt 中设置明文或将其转换为盐吗?