Python数据分析基础:分组统计并排序。用到:df.groupby()和df.sort_values()

  很多教程把df.groupby()写得非常复杂,咱们以一个实例,用一个比较简单的需求讲讲这东西到底怎么用。
@TOP

需求

  假设拿到如下图所示Excel表,想统计“计算机”类图书一共卖了多少本。
图书销售表
  如果直接在表中操作,怎么做?
  第一步,选中B列,排序,升序或降序都无所谓,总之让相同的分类凑一起;
升序排序后图书销售表
  第二步,这里数据量少,直接拖选一下计算机这4行看状态栏就知道总共136。量多的时候可以用Excel的“分类汇总”功能,同样得到136:
分类汇总
  一共就两步,完成任务。当然这个销量还可以再排序,没这个需求,不排也可以。
  如果用Python+pandas来做,如何?

编程实现

  直接上代码吧,边写边解说。

import pandas as pd
xls = "book.xls"
df = pd.DataFrame(pd.read_excel(xls))
"""
    序号   分类  销量
0   1   文学   5
1   2  计算机   7
2   3   文学  89
3   4   历史  24
4   5  计算机  14
5   6   文学   6
6   7  计算机  87
7   8   地理  23
8   9   政治  17
9  10  计算机  28
"""
grouped = df.groupby(["分类"])
# 按“分类”分组,得到所有分组对象,比在Excel中直接操作少了一步提前排序
# 把df当数据库看待,“分类”字段下有重复值,筛选一下,求出不重复值:计算机、文学、政治、地理、历史,并按这些分类重新组织df
# type(grouped):<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
s = grouped["销量"]  # 从所有分组对象中拿出“销量”对象来
"""
# s: <pandas.core.groupby.generic.SeriesGroupBy object at 0x11A05130>
# type(s):<class 'pandas.core.groupby.generic.SeriesGroupBy'>
"""
s = s.sum()  # 销量求和。基于不重复分类的各销量的和
"""<class 'pandas.core.series.Series'>
分类
历史      24
地理      23
政治      17
文学     100
计算机    136
Name: 销量, dtype: int64
"""
# Series数据类型再来个reset_index()操作就变成DataFrame类型了
df1 = s.reset_index()
"""
    分类   销量
0   历史   24
1   地理   23
2   政治   17
3   文学  100
4  计算机  136
"""
# df1就是上普通df了,自然可以再用df.sort_values()排序了
# 当然不排序也可以,任务至此已基本完成!
df2 = df1.sort_values(by=["销量"])
"""
    分类   销量
2   政治   17
1   地理   23
0   历史   24
3   文学  100
4  计算机  136
"""

  我只想要136这个数,怎么取?

df2 = df2.set_index(["分类"])
this_number = df2.loc["计算机", "销量"]  # 136

  任务完成!
  推荐微信公众号:apsoft2008。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值