Pandas groupby分组统计实战:聚合、遍历与天气数据分析
本文详解Pandas中groupby的核心用法,涵盖单列与多列分组、多种聚合函数应用及自定义聚合。通过遍历groupby对象深入理解执行流程,并结合北京天气数据实例,演示如何计算月度最高温、均质指数等统计指标,帮助开发者掌握高效的数据分组处理技巧。
其逻辑类似于SQL语句:SELECT city, MAX(temperature) FROM city_weather GROUP BY city;。
groupby的操作机制为:首先依据指定条件对数据进行分组,随后在每个分组内部应用聚合函数或转换函数。
本次演示主要包含三个部分:一、利用聚合函数进行分组数据统计;二、通过遍历groupby结果来解析其执行流程;三、结合具体实例对天气数据进行分组探索。
1、创建测试数据并导入必要的Python包。
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循环遍历groupby对象中的每一个分组(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是一个包含两个元素的元组(tuple),分别代表参与分组的不同的列名。
g.get_group(('foo', 'one'))#可以获取单个分组的数据可以直接查询groupby操作后的特定几列,从而生成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、查看每个月份的最高温度、最低温度以及平均空气质量指数(AQI)。
group_data = df.groupby('month').agg({"bWendu":np.max, "yWendu":np.min, "aqi":np.mean})
group_data.plot()至此,关于Pandas实现groupby分组统计的实践介绍完毕。如需了解更多Pandas groupby相关内容,建议搜索本站过往文章或继续浏览后续教程,感谢大家的支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









