pandas中df.groupby()方法深入讲解

目录
  • 分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组。
  • 分组的返回结果
  • 按一列分组:df.groupby(column)
  • 按多列分组:df.groupby([column1, column2])
  • 查看每组的统计数据:df.groupby(column).describe()
  • 组内离散列计数:df.groupby(column)[column2].value_counts()
  • 组内数值列和:df.groupby(column).sum()
  • 组内成员数:df.groupby(column).count()
  • 组内数值列均值:df.groupby(column).mean()
  • 组内数值列最大值:df.groupby(column).max()
  • 组内应用函数:df.groupby(column1)[column2].apply()
  • 组内不同列用不同函数:df.groupby(column).agg({column1:func, column2:func,…})
  • 总结

分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组。

pandas中,数据表就是DataFrame对象,分组就是groupby方法。将DataFrame中所有行按照一列或多列来划分,分为多个组,列值相同的在同一组,列值不同的在不同组。

分组后,就得到一个groupby对象,代表着已经被分开的各个组。后续所有的动作,比如计数,求平均值等,都是针对这个对象,也就是都是针对各个组。即在每个组组内进行计数,求平均值等。

分组的返回结果

df = pd.DataFrame([['a', 'man', 120, 90],
                   ['b', 'woman', 130, 100],
                   ['a', 'man', 110, 108],
                   ['a', 'woman', 120, 118]], columns=['level', 'gender', 'math','chinese'])
group = df.groupby('gender')

df.groupby() 函数返回的对象是一系列键值对,其中键是分组的字段值,值是该字段值下的数据表。分组的结果是无法直接输出的,print()只能看到该结果的数据类型。可以用循环对分组后的结果进行遍历。

print(group)
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x11cb60f50>
for key, value in group:
    print(key)
    print(value)
    print("")
man
  level gender  math  chinese
0     a    man   120       90
2     a    man   110      108

woman
  level gender  math  chinese
1     b  woman   130      100
3     a  woman   120      118

按一列分组:df.groupby(column)

group = df.groupby('gender') # 按照'gender'列的值来分组,创建一个groupby对象
# group = df.groupby(['gender']) # 等价写法
for key, df in group:
    print(key)
    print(df)
man
  level gender  math  chinese
0     a    man   120       90
2     a    man   110      108

woman
  level gender  math  chinese
1     b  woman   130      100
3     a  woman   120      118

按多列分组:df.groupby([column1, column2])

group = df.groupby(['gender', 'level'])
# 先按照'grade'列的值来分组。每组内,再按'level'列来分组。也返回一个groupby对象
for key, value in group:
    print(key)
    print(value)
    print("")
('man', 'a')
  level gender  math  chinese
0     a    man   120       90
2     a    man   110      108

('woman', 'a')
  level gender  math  chinese
3     a  woman   120      118

('woman', 'b')
  level gender  math  chinese
1     b  woman   130      100

查看每组的统计数据:df.groupby(column).describe()

对数据表中的数值列进行统计,给出包括count = 计数,mean = 平均数,std = 方差,min = 最小值,25% = 四分位数,50% = 二分位数,75% = 四分之三分位数,max = 最大值的信息。不会对非数值列统计。

返回的是一个dataframe。

查看所有列的统计信息

group = df.groupby(['gender'])
df1 = group.describe()
# df1 = df.groupby(['gender']).describe() # 等价写法

print(type(df1))
print(df1)
<class 'pandas.core.frame.DataFrame'>

 math                                                     chinese  \
       count   mean       std    min    25%    50%    75%    max   count
gender
man      2.0  115.0  7.071068  110.0  112.5  115.0  117.5  120.0     2.0
woman    2.0  125.0  7.071068  120.0  122.5  125.0  127.5  130.0     2.0   

         mean        std    min    25%    50%    75%    max
gender
man      99.0  12.727922   90.0   94.5   99.0  103.5  108.0
woman   109.0  12.727922  100.0  104.5  109.0  113.5  118.0

查看指定列的统计信息

group = df.groupby(['gender'])
df1 = group.describe()['math'] # 只看math列的统计信息
print(df1)
count   mean    std    min    25%    50%    75%    max
gender
man       2.0  115.0  7.071068  110.0  112.5  115.0  117.5  120.0
woman     2.0  125.0  7.071068  120.0  122.5  125.0  127.5  130.0

查看纵向视图

unstack()可以将每列的统计信息垂直排列。

group = df.groupby(['gender'])
df1 = group.describe().unstack()
print(df1)
gender
math     count  man         2.000000
                woman       2.000000
         ...
         max    man       120.000000
                woman     130.000000
chinese  count  man         2.000000
                woman       2.000000
         ...
                woman     113.500000
         max    man       108.000000
                woman     118.000000
dtype: float64

组内离散列计数:df.groupby(column)[column2].value_counts()

数据表中的列按值是否连续,可以分为连续值列、离散值列。对于离散值列,可以统计其不重复值的个数。对于连续值列,统计不重复值一般没有意义。统计结果是一个Series对象。

group = df.groupby(['gender'])
df1 = group['level'].value_counts() # 统计'level'列的不重复值个数

print(type(df1))
print(df1)
<class 'pandas.core.series.Series'>

gender  level
man     a        2
woman   a        1
        b        1py
Name: level, dtype: int64

组内数值列和:df.groupby(column).sum()

group = df.groupby(['gender'])
df1 = group.sum()
print(df1)
math  chinese
gender
man      230      198
woman    250      218

组内成员数:df.groupby(column).count()

每组内,按列统计每组的成员数。每列的统计结果是一样的

group = df.groupby(['gender'])
df1 = group.count()
print(df1)
level  math  chinese
gender
man         2     2        2
woman       2     2        2

组内数值列均值:df.groupby(column).mean()

每组内,统计所有数值列的均值,非数值列无均值。

所有组的均值

group = df.groupby(['gender'])
df1 = group.mean()
print(df1)
math  chinese
gender
man      115       99
woman    125      109

单组的均值

group = df.groupby(['gender'])
df1 = group['math'].mean()
print(df1)
gender
man      115
woman    125
Name: math, dtype: int64

组内数值列最大值:df.groupby(column).max()

每组内,统计所有数值列的最大值,非数值列无最大值

统计所有数值列的最大值

group = df.groupby(['gender'])
df1 = group.max()
print(df1)
level  math  chinese
gender
man        a   120      108
woman      b   130      118

统计单个数值列的最大值

group = df.groupby(['gender'])
df1 = group['math'].max()
print(df1)
gender
man      120
woman    130
Name: math, dtype: int64

组内应用函数:df.groupby(column1)[column2].apply()

group = df.groupby(['gender'])
df1 = group['math'].apply(np.mean) # 求组内均值
print(df1)
gender
man      115.0
woman    125.0
Name: math, dtype: float64

组内不同列用不同函数:df.groupby(column).agg({column1:func, column2:func,…})

group = df.groupby(['gender'])
df1 = group.agg({'math':np.mean, 'chinese':np.std})
print(df1)
math    chinese
gender
man      115  12.727922
woman    125  12.727922

总结

到此这篇关于pandas中df.groupby()方法讲解的文章就介绍到这了,更多相关pandas df.groupby()方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Pandas之groupby( )用法笔记小结

    groupby官方解释 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs) Group series using mapper (dict or key function, apply given function to group, return result as series) or by a series of

  • pandas获取groupby分组里最大值所在的行方法

    pandas获取groupby分组里最大值所在的行方法 如下面这个DataFrame,按照Mt分组,取出Count最大的那行 import pandas as pd df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]}) df Count Mt Sp Value 0 3 s1

  • 详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式--函数名称) 举例如下: print(df["评分"].groupby([df["地区"],df["类

  • pandas之分组groupby()的使用整理与总结

    前言 在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决.在使用pandas进行数据分析时,groupby()函数将会是一个数据分析辅助的利器. groupby的作用可以参考 超好用的 pandas 之 groupby 中作者的插图进行直观的理解: 准备 读入的数据是一段学生信息的数据,下面将以这个数据为例进行整理grouby()函数的

  • pandas数据预处理之dataframe的groupby操作方法

    在数据预处理过程中可能会遇到这样的问题,如下图:数据中某一个key有多组数据,如何分别对每个key进行相同的运算? dataframe里面给出了一个group by的一个操作,对于"group by"操作,我们通常是指以下一个或多个操作步骤: l (Splitting)按照一些规则将数据分为不同的组: l (Applying)对于每组数据分别执行一个函数: l (Combining)将结果组合到一个数据结构中: 使用dataframe实现groupby的用法: # -*- coding

  • pandas中df.groupby()方法深入讲解

    目录 分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组. 分组的返回结果 按一列分组:df.groupby(column) 按多列分组:df.groupby([column1, column2]) 查看每组的统计数据:df.groupby(column).describe() 组内离散列计数:df.groupby(column)[column2].value_counts() 组内数值列和:df.groupby(column).sum() 组内成员数:df.groupby

  • Pandas高级教程之Pandas中的GroupBy操作

    目录 简介 分割数据 多index get_group dropna groups属性 index的层级 group的遍历 聚合操作 通用聚合方法 可以同时指定多个聚合方法: NamedAgg 不同的列指定不同的聚合方法 转换操作 过滤操作 Apply操作 简介 pandas中的DF数据类型可以像数据库表格一样进行groupby操作.通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据. 本文将会详细讲解Pandas中的groupby操作. 分割数据 分割数据的目的是将DF分

  • pandas中ix的使用详细讲解

    在上一篇博客中,我们已经仔细讲解了iloc和loc,只是简单了提到了ix.这是因为相比于前2者,ix更复杂,也更让人迷惑. 因此,本篇博客通过例子的解释试图来描述清楚ix,尤其是与iloc和loc的联系. 首先,再次介绍这三种方法的概述: loc gets rows (or columns) with particular labels from the index. loc从索引中获取具有特定标签的行(或列). iloc gets rows (or columns) at particular

  • pandas中pd.groupby()的用法详解

    在pandas中的groupby和在sql语句中的groupby有异曲同工之妙,不过也难怪,毕竟关系数据库中的存放数据的结构也是一张大表罢了,与dataframe的形式相似. import numpy as np import pandas as pd from pandas import Series, DataFrame df = pd.read_csv('./city_weather.csv') print(df) '''           date city  temperature

  • Pandas中df.loc[]与df.iloc[]的用法与异同 

    目录 官网资料: 用 途: 输入参数注意: loc与iloc 实际用例: 官网资料: loc  :https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.htmliloc  : https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html 用 途: 取数: 从dataframe中取 一

  • pandas中df.rename()的具体使用

    df.rename()用于更改行列的标签,即行列的索引.可以传入一个字典或者一个函数.在数据预处理中,比较常用. 官方文档: DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors=‘ignore’) 参数解释: 创建实例 import pandas as pd df = pd.DataFrame({'name':['

  • Python object类中的特殊方法代码讲解

    python版本:3.8 class object: """ The most base type """ # del obj.xxx或delattr(obj,'xxx')时被调用,删除对象中的一个属性 def __delattr__(self, *args, **kwargs): # real signature unknown """ Implement delattr(self, name). "&q

  • ThreadPoolExecutor中的submit()方法详细讲解

    目录 submmit()参数解析 submit()的返回值Future FutureTask的get()的实现 submit()使用案例 在使用线程池的时候,发现除了execute()方法可以执行任务外,还发现有一个方法submit()可以执行任务. submit()有3个参数不一的方法,这些方法都是在ExecutorService接口中声明的,在AbstractExecutorService中实现,而ThreadPoolExecutor继承AbstractExecutorService. <T

  • Pandas中GroupBy具体用法详解

    目录 简介 分割数据 多index get_group dropna groups属性 index的层级 group的遍历 聚合操作 通用聚合方法 同时使用多个聚合方法 NamedAgg 不同的列指定不同的聚合方法 转换操作 过滤操作 Apply操作 简介 pandas中的DF数据类型可以像数据库表格一样进行groupby操作.通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据. 本文将会详细讲解Pandas中的groupby操作. 分割数据 分割数据的目的是将DF分割成为

  • pandas中groupby操作实现

    目录 一.实验目的 二.实验原理 三.实验环境 四.实验内容 五.实验步骤 一.实验目的 熟练掌握pandas中的groupby操作 二.实验原理 groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False) 参数说明: by是指分组依据(列表.字典.函数,元组,Series) axis:是作用维度(0为行,1为列) level:根据索引级别分组 sort:对group

随机推荐