python - 排序和过滤 pandas 数据透视表
问题描述
使用这些数据
import pandas as pd
import numpy as np
df=pd.read_excel(
"https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=True"
)
df["date"] = pd.to_datetime(df['date'])
我使用下一个代码来获取年、月和日:
df['year'],df['month'],df['day'] = df.date.dt.year, df.date.dt.month, df.date.dt.day
account number name sku quantity \
0 740150 Barton LLC B1-20000 39
1 714466 Trantow-Barrows S2-77896 -1
2 218895 Kulas Inc B1-69924 23
3 307599 Kassulke, Ondricka and Metz S1-65481 41
4 412290 Jerde-Hilpert S2-34077 6
unit price ext price date year month day
0 86.69 3380.91 2014-01-01 07:21:51 2014 1 1
1 63.16 -63.16 2014-01-01 10:00:47 2014 1 1
2 90.70 2086.10 2014-01-01 13:24:58 2014 1 1
3 21.05 863.05 2014-01-01 15:05:22 2014 1 1
4 83.21 499.26 2014-01-01 23:26:55 2014 1 1
然后我使用下一个代码来获取数据透视表
df.pivot_table(index=['year','month','name'],values='ext price',aggfunc=np.sum).head(25)
ext price
year month name
2014 1 Barton LLC 6177.57
Cronin, Oberbrunner and Spencer 1141.75
Frami, Hills and Schmidt 5112.34
Fritsch, Russel and Anderson 15130.77
Halvorson, Crona and Champlin 9997.17
Herman LLC 10749.84
Jerde-Hilpert 11274.33
Kassulke, Ondricka and Metz 7322.83
Keeling LLC 6847.86
Kiehn-Spinka 8097.50
Koepp Ltd 10768.33
Kuhn-Gusikowski 7309.54
Kulas Inc 15398.87
Pollich LLC 1004.22
Purdy-Kunde 4689.37
Sanford and Sons 9544.13
Stokes LLC 5809.34
Trantow-Barrows 14328.26
White-Trantow 13703.77
Will LLC 20953.87
2 Barton LLC 12218.03
Cronin, Oberbrunner and Spencer 13976.26
Frami, Hills and Schmidt 4124.53
Fritsch, Russel and Anderson 9595.35
Halvorson, Crona and Champlin 7082.15
我想知道我是否可以编辑我的数据透视表来获取和排序每个月的前 5 个name
(顶部ext price
) 。
我试图得到这个:
year month name
2014 1 Barton LLC 6177.57
Cronin, Oberbrunner and Spencer 1141.75
Frami, Hills and Schmidt 5112.34
Fritsch, Russel and Anderson 15130.77
Halvorson, Crona and Champlin 9997.17
2 Barton LLC 12218.03
Cronin, Oberbrunner and Spencer 13976.26
Frami, Hills and Schmidt 4124.53
Fritsch, Russel and Anderson 9595.35
Halvorson, Crona and Champlin 7082.15
... ...
11 Koepp Ltd 4882.27
Kuhn-Gusikowski 7197.89
Kulas Inc 4149.34
Pollich LLC 6334.21
12 Barton LLC 2772.90
Cronin, Oberbrunner and Spencer 7640.60
Frami, Hills and Schmidt 16249.81
Fritsch, Russel and Anderson 12345.64
我尝试使用 groupby 进行排序,但仍然找不到。
解决方案
这是你要找的吗?
>>> df.sort_values('ext price', ascending = False).groupby(
['year', 'month']).head(5).set_index(['year', 'month'])['name']
year month
2014 7 Kiehn-Spinka
7 Kuhn-Gusikowski
12 Koepp Ltd
7 Pollich LLC
3 Kulas Inc
2 Barton LLC
3 Keeling LLC
10 Koepp Ltd
7 Trantow-Barrows
9 Kassulke, Ondricka and Metz
推荐阅读
- sql - 从两个表更新新创建的表 - SQL
- jmeter - JMeter - 如何批处理线程组中的线程
- objective-c - 片段着色器功能中 float4 和 half4 的主要区别是什么?
- c++ - 为什么pair在初始化中不需要类型
- php - 使用 LIKE 子句和 NO_BACKSLASH_ESCAPES 模式在 mysqli prepare() 中转义 % 符号
- docker - 微服务:docker.compose 文件中的 ESHOP_OCELOT_VOLUME_SPEC 行是什么意思
- javascript - Handsontable 中的 Handsontable 下拉高度调整
- quartz-scheduler - 泽西集成石英 @Inject 注释不起作用
- excel - 如何从 Sheet2 和 Sheet3 索引以查找 Sheet1 的值
- c - 如何通过命令行参数传递参数将文本替换到文件的特定位置