分组与聚合

一、分组

在处理数据时,经常会把数据集里拥有相同特征的数据划分到一个群体(group)里进行分析。

#.groupby(分组键)
#分组键:按哪一列分组
groupByDate = data.groupby(data["date"])

二、聚合

分组后,就可以在各个分组里进行计算,产生新的值,最终,所有分组会联合为一个结果。

聚合操作是groupby()函数后常见的操作,可以通过聚合函数来计算。聚合函数即统计函数,如:count()--计数;sum()--求和等。

#先分组再聚合
groupByDate = data.groupby(data["date"]).sum()

三、数据的重采样

重采样:会把数据中的时间点从一个频率转换为另一个频率。简单来说,就是基于时间段的分组操作。

分三类:①向下采样:从高频率到低频率,比如从每天到每月;

②向上采样:从低频率到高频率,比如从每月到每天;

③同频采样:频率不变,比如从每月的第一个星期天到每月的最后一个星期五。

步骤如下:

第一步:将时间格式的列作为行索引index(因为重采样需要根据时间格式的行索引来进行操作。)

第二步:重采样。resample()函数

第三步:使用聚合函数,把结果聚合起来。

#.resample("所需采样的频率规则")
'''常用频率:在pandas中,频率是由基础频率和一个由整数表示的倍数组成。比如,"H"代表每小时,"5M"代表每五个月,"10T"代表每10分钟'''
resampleData = groupByDate.resample("M").sum()

常用频率大总结:

D

每天

A

每年年末

W

每周

H

每小时

M

每月月末

T

每分钟

Q

每个季度末

S

每秒

注意:resample()函数需要在groupby()函数之后使用

四、访问多层行索引

多层索引是pandas的重要特性,允许我们在一个轴上拥有2个或2个以上的索引层级。如图:在axis=1的方向上拥有l两层索引,也就是两层行索引。

#访问第一层行索引:通过.loc属性,按照第一层index的值,访问该index所对应的一组数据的值
enter = groupByCategory.loc["娱乐"]

补充知识点:

五、重塑多层索引

六、apply应用

在pandas中,我们经常会使用apply()函数,将自定义的函数应用到一个DATAFrame上,对其每一行或每一列进行指定的操作,然后根据自定义的函数返回一个新的结果。

#计算占比的函数
def getPercentage(item):
    return item/sumTurnover

#使用getPercentage()函数
percentage = groupByCategory.apply(getPercentage)

apply应用的整体操作:

①先自定义一个函数

②对一个DataFrame使用apply()函数,并将自定义函数的名称传入apply()函数中。此时,DataFrame的每一列会作为一个Series,传入到自定义的函数中

③对每一个Series执行结果后,apply()函数会将结果整合在一起,并通过自定义函数里的return返回相应的值

七、例题--牛油果指数

百题斩第46题

现代中产阶级的生活已经无法离开牛油果了,牛油果的价格也可以侧面反映一个地区的生活水平。

生活在纽约市的彬彬,获取了2015-2018年间全美国各大城市的牛油果价格数据,存储在 "/Users/binbin/avocado.csv" 路径下:

Date表示价格调查的日期,AveragePrice表示当天的平均价格,region表示调查的城市。

彬彬想要获取2015-2018中纽约("NewYork")与芝加哥("Chicago")每月牛油果平均价格,并计算全美国的每月牛油果平均价格,画出3条折线图进行比较。

具体步骤如下:

1. 导入模块、读取文件、并将字体设置为"Arial Unicode MS"

2. 根据城市("region"),将原数据分组、采样聚合,获取纽约和芝加哥两个城市每个月的牛油果平均价格

3. 在这之后,以月份为x轴,绘制展示纽约牛油果每月均价的折线图,并将折线颜色设置为skyblue,标记点的样式设置为"o",图例设置为"纽约价格水平"

4. 同时,以月份为x轴,绘制展示芝加哥牛油果每月均价的折线图,并将折线颜色设置为blue,标记点的样式为"o",图例设置为"芝加哥价格水平"

5. 利用所学知识,计算全美国每个月的牛油果均价,并制作对应的折线图,将折线颜色设置为green,标记点的样式为"o",图例设置为"全美价格水平"

6. 最后,将x轴标题为"时间",y轴标题设置为"价格水平",图例显示在左上角

#1. 导入模块、读取文件、并将字体设置为"Arial Unicode MS"
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv("/Users/binbin/avocado.csv")
plt.rcParams["font.sans-serif"]="Arial Unicode MS"

#2. 根据城市("region"),将原数据分组、采样聚合,获取纽约和芝加哥两个城市每个月的牛油果平均价格
df["Date"] = pd.to_datetime(df["Date"])
df = df.set_index("Date")
ave = df.groupby(df["region"]).resample("M").mean()
NewYork_Ave = ave.loc["NewYork"]
Chicago_Ave = ave.loc["Chicago"]

#3. 在这之后,以月份为x轴,绘制展示纽约牛油果每月均价的折线图,并将折线颜色设置为skyblue,标记点的样式设置为"o",图例设置为"纽约价格水平"
plt.plot(NewYork_Ave.index,NewYork_Ave["AveragePrice"],color="skyblue",marker="o",label="纽约价格水平")
#4. 同时,以月份为x轴,绘制展示芝加哥牛油果每月均价的折线图,并将折线颜色设置为blue,标记点的样式为"o",图例设置为"芝加哥价格水平"
plt.plot(Chicago_Ave.index,Chicago_Ave["AveragePrice"],color="blue",marker="o",label="芝加哥价格水平")

#5. 利用所学知识,计算全美国每个月的牛油果均价,并制作对应的折线图,将折线颜色设置为green,标记点的样式为"o",图例设置为"全美价格水平"
TotalUS_Ave = df.resample("M").mean()
plt.plot(TotalUS_Ave.index,TotalUS_Ave["AveragePrice"],color="green",marker="o",label="全美价格水平")

#6. 最后,将x轴标题为"时间",y轴标题设置为"价格水平",图例显示在左上角
plt.xlabel("时间")
plt.ylabel("价格水平")
plt.legend(loc="upper left")
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值