您的位置: 网站首页> Pandas教程> 当前文章

pandas中groupby的分组原理

老董-我爱我家房产SEO2022-01-13198围观,130赞

  对数据分组需要明确数据源及分组条件,分组完毕后才能对每个组进行针对性操作。在pandas中groupby函数就是对数据进行分组的。如果想全面了解分组聚合的场景,可以参考文章pandas之groupby使用详解。本文介绍groupby的分组原理。

  我们先看1个源数据的长相:

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.read_excel('test.xlsx')
print(df)
      关键词  城市  区域  二手房房源  租房房源
0    贡院6号  北京  北部      4     0
1     观澳园  北京  北部     18    13
2   天鹅湾南区  北京  北部     14    15
3    木材新村  杭州  东部      4     9
4    万寿亭街  杭州  东部      1     2
5  瓶窑镇凤溪路  杭州  东部      2     0
6     孝子坊  杭州  东部      2     0
7     永和坊  杭州  东部     24     5

  1、按照单列分组

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.read_excel('test.xlsx')
gb = df.groupby(['城市'])
print(gb) #DataFrameGroupBy对象
df_new = gb.sum() #每组求和
print(df_new)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001DD707720D0>
    二手房房源  租房房源
城市             
北京     36    28
杭州     33    16

  2、按照多列分组

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.read_excel('test.xlsx')
gb = df.groupby(['城市','区域'])
print(gb) #DataFrameGroupBy对象
df_new = gb.max() # 每组最大值
print(df_new)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001DD707720D0>
          关键词  二手房房源  租房房源
城市 区域                     
北京 北部    贡院6号     18    15
杭州 东部  瓶窑镇凤溪路     24     9

  上述结果可知:groupby分组后是1个DataFrameGroupBy对象,直接print看不出什么来,其实这个对象是可以进行遍历的,该对象类似于[(组名,子组df),(组名,子组df2)]。这个对象可以调用很多方法来对每1组的数据进行运算。

  进一步的DataFrameGroupBy对象及其方法会在后文介绍,本文的目的只是对groupby的分组有个基础认识。

  3、分组的本质

  一般我们给groupby传入列名(某1列或者多列)分组,本质上他按照所传入的列的唯一值来来分组的,按照值分组是groupby分组的本质,在pandas官方文档也介绍了可以传入ndarray数组,如过传入np数组则按照数组的值来分组。但是需要注意1个问题,数组的长度和df的长度要一致,否则报错 Grouper and axis must be same length,详情看下一篇文章。

# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd

df = pd.read_excel('test.xlsx')
values = np.array(['北京','杭州'] *4)
print(df.groupby(values).mean())
    二手房房源  租房房源
北京   5.25  4.25
杭州  12.00  6.75

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    pandas中groupby的分组原理文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200