Pandas实现groupby分组统计的实践
类似SQL:
select city,max(temperature) from city_weather group by city;
groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数
本次演示:
一、分组使用聚合函数做数据统计
二、遍历groupby的结果理解执行流程
三、实例分组探索天气数据
1、创建数据和导入包
import pandas as pd
import numpy as np
# 加上这一句,能在jupyter notebook展示matplot图表
%matplotlib inline
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
2、分组使用聚合函数做数据统计
1、单个列groupby,查询所有数据列的统计
df.groupby('A').sum()
groupby中的’A’变成了数据的索引列
因为要统计sum,但B列不是数字,所以被自动忽略掉
2、多个列groupby,查询所有数据列的统计
df.groupby(['A','B']).mean()
我们看到:(‘A’,‘B’)成对变成了二级索引
df.groupby(['A','B'], as_index=False).mean() #这会使得A、B两列不会成为二级索引
3、同时查看多种数据统计
df.groupby('A').agg([np.sum, np.mean, np.std])#列变成了多级索引
4、查看单列的结果数据统计
# 方法1:预过滤,性能更好
df.groupby('A')['C'].agg([np.sum, np.mean, np.std])
# 方法2
df.groupby('A').agg([np.sum, np.mean, np.std])['C']
5、不同列使用不同的聚合函数
df.groupby('A').agg({"C":np.sum, "D":np.mean})
3、遍历groupby的结果理解执行流程
for循环可以直接遍历每个group
1、遍历单个列聚合的分组
g = df.groupby('A')
for name,group in g:
print(name)
print(group)
可以获取单个分组的数据
g.get_group('bar')
2、遍历多个列聚合的分组
g = df.groupby(['A', 'B'])
for name,group in g:
print(name)
print(group)
print()
name是一个2个元素的tuple,代表不同的列
g.get_group(('foo', 'one'))#可以获取单个分组的数据
可以直接查询group后的某几列,生成Series或者子DataFrame
g['C']
for name, group in g['C']:
print(name)
print(group)
print(type(group))
print()
其实所有的聚合统计,都是在dataframe和series上进行的
4、实例分组探索天气数据
fpath = "./datas/beijing_tianqi/beijing_tianqi_2018.csv"
df = pd.read_csv(fpath)
# 替换掉温度的后缀℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')
df.head()
# 新增一列为月份
df['month'] = df['ymd'].str[:7]
df.head()
1、查看每个月的最高温度
data = df.groupby('month')['bWendu'].max()
data
data.plot()#绘图
2、查看每个月的最高温度、最低温度、平均空气质量指数
group_data = df.groupby('month').agg({"bWendu":np.max, "yWendu":np.min, "aqi":np.mean})
group_data.plot()
到此这篇关于Pandas实现groupby分组统计的实践的文章就介绍到这了,更多相关Pandas groupby分组统计内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341