【Python数据分析】分组统计groupby

目录

  • 1.语法
  • 2.基础分组
  • 2.分组后可迭代对象操作
  • 3.按照轴类型进行分组
  • 4.通过字典或者Series进行分组
  • 5.通过函数分组
  • 6.分组后常用数值函数
  • 7.多函数计算

分组统计groupby功能:

  • 根据某些条件,将数据拆成组
  • 对每个组独立应用函数
  • 将结果合并到一个数据结构中

1.语法

Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中。
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

2.基础分组

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':['Foo','Bar','Foo','Bar','Foo'],
                   'B':['one','two','three','one','two'],
                   'C':np.random.randn(5),
                   'D':range(5)
                  })
print(df)

print('------------')

print(df.groupby('A'),type(df.groupby('A'))) #此处得到的是一个groupby对象,并没有进行计算
print('------------')
# 对A分组

a = df.groupby('A').mean() # 按A列分组后并对C跟D列进行求平均
print(a)

print('------------')

# 先对A分组,再对B分组,然后计算其平均值
b = df.groupby(['A','B']).mean()
print(b)

# 对A分组,然后对D列求平均值
print('------------')
c = df.groupby(['A'])['D'].mean()
print(c)

print('------------')

# 默认axis=0,按行来分组

输出结果:

2.分组后可迭代对象操作

import pandas as pd
# 分组,可迭代对象
df = pd.DataFrame({'X':['A','B','A','B'],
                  'Y':[1,4,3,2]
                  })
print(df)
print(df.groupby('X'),type(df.groupby('X')))
print('----------------')

print(list(df.groupby('X')),'可迭代对象,直接生成list \n')
print(list(df.groupby('X'))[0],'以元组的形势展示 \n')

for n,g in df.groupby('X'):
    print(n) # 组名
    print(g) # 组后跟的DataFrame
    print('******************')
print('------------------get_group()提取分组后的组--------------------')

print(df.groupby(['X']).get_group('A'),'\n')
print(df.groupby(['X']).get_group('B'),'\n')

print('-------------------')
# groups:将分组后的groups转为dict,可以字典索引方法来查看groups里的元素
grouped = df.groupby(['X'])
print(grouped.groups)
print(grouped.groups['A'])  # 也可写:df.groupby('X').groups['A']
print('-------------------')

# size():查看分组后的长度
sz = grouped.size()
print(sz,type(sz))
print('-----')

# 按照两个列进行分组
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)})
grouped = df.groupby(['A','B']).groups
print(df)
print(grouped)
print(grouped[('foo', 'three')])

输出结果:

3.按照轴类型进行分组

# 按照轴类型进行分组
import pandas as pd
df = pd.DataFrame({'data1':np.random.rand(2),
                  'data2':np.random.rand(2),
                  'key1':['a','b'],
                  'key2':['one','two'],
                  })
print(df)
print(df.dtypes)
print('----------------------------')
for n,p in df.groupby(df.dtypes,axis=1):
    print(n)
    print(p)
    print('*************')

输出结果:

4.通过字典或者Series进行分组

import pandas as pd
df = pd.DataFrame(np.arange(16).reshape(4,4), columns = ['a','b','c','d'])
print(df)
print('-------------------------')
# mapping中,a、b列对应的为one,c、d列对应的为two,以字典来分组
mapping = {'a':'one','b':'one','c':'two','d':'two','e':'three'}
by_column = df.groupby(mapping, axis = 1)
print(by_column.sum())

print('-------------------------')
# s中,index中a、b对应的为one,c、d对应的为two,以Series来分组
s = pd.Series(mapping)
print(s,'\n')
print(s.groupby(s).count())

输出结果:

5.通过函数分组

import pandas as pd
df = pd.DataFrame(np.arange(16).reshape(4,4),
                 columns = ['a', 'b', 'c', 'd'],
                 index = ['abc', 'bcd', 'aa', 'b']
                 )
print(df,'\n')
# 按照字母长度分组,分组后求和
print(df.groupby(len).sum())

输出结果:

6.分组后常用数值函数

import pandas as pd
s = pd.Series([1,2,3,10,20,30], index = [1,2,3,1,2,3])
grouped = s.groupby(level=0) # groupby(level=0) 将同一个index的分为一组

print(grouped)
print(grouped.first(),'-------first:非NaN的第一个值 \n')
print(grouped.last(),'-------last:非NaN的最后一个值 \n')
print(grouped.sum(),'-------sum:非NaN的和 \n')
print(grouped.mean(),'-------mean:非NaN的平均值 \n')
print(grouped.median(),'-------median:非NaN的算术中位数 \n')
print(grouped.count(),'-------count:非NaN的值 \n')
print(grouped.min(),'-------min、max:非NaN的最小值、最大值 \n')
print(grouped.std(),'-------std,var:非NaN的标准差和方差\ \n')
print(grouped.prod(),'-------prod:非NaN的积\n')

输出结果:

7.多函数计算

import pandas as pd
df = pd.DataFrame({'a':[1,1,2,2],
                  'b':[10,10,20,20],
                  'c':[100,100,200,200],
                  'd':[1000,1000,2000,2000]
                  })
print(df)
print('----------------------')
print(df.groupby('a').agg(['mean',np.sum])) # 即可以求平均数,也可以求和
print(df.groupby('a')['b'].agg({"mean","sum"}))

输出结果:

原文地址:https://www.cnblogs.com/OliverQin/p/12341696.html

时间: 2024-10-06 02:25:36

【Python数据分析】分组统计groupby的相关文章

Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4节 透视表和交叉表 第5节 时间序列 第6节 日期的规范.频率以及移动 第7节 时区处理 第8节 时期及算术运算 第9节 重采样及频率转换 第10节 时间序列绘图 groupby 技术 一.实验简介 Python 数据分析(二)需要同学们先行学完 Python 数据分析(一)的课程. 对数据集进行分

小白学 Python 数据分析(11):Pandas (十)数据分组

人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):Pandas (二)数据结构 Series 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择 小白学

总是在起头可是能怎么办呢 Python数据分析

目录 前言1 第1章准备工作5 本书主要内容5 为什么要使用Python进行数据分析6 重要的Python库7 安装和设置10 社区和研讨会16 使用本书16 致谢18 第2章引言20 来自bit.ly的1.usa.gov数据21 MovieLens1M数据集29 1880—2010年间全美婴儿姓名35 小结及展望47 第3章IPython:一种交互式计算和开发环境48 IPython基础49 内省51 使用命令历史60 与操作系统交互63 软件开发工具66 IPythonHTMLNoteboo

《Python 数据分析》笔记——pandas

Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的数据结构:DataFrame和Series pandas数据结构之DataFrame pandas的DataFrame数据结构是一种带标签的二维对象,与Excel的电子表格或者关系型数据表非常相似. 可以用下列方式来创建DataFrame: 1.从另一个DataFrame创建DataFrame 2.

Python数据分析--Pandas知识点(二)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表df 1 import pandas as pd 2 3 df = pd.DataFrame({"地区": ["A区","B区", "C区"], 4 "前半年销量": [3500, 4500,3800], 5

Python数据分析--Pandas知识点(三)

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, 二的基础上继续总结. 前面所介绍的都是以表格的形式中展现数据, 下面将介绍Pandas与Matplotlib配合绘制出折线图, 散点图, 饼图, 柱形图, 直方图等五大基本图形. Matplotlib是python中的一个2D图形库, 它能以各种硬拷贝的格式和跨平台的交互式环境生成高质量的图形,

【python数据分析实战】电影票房数据分析(二)数据可视化

目录 图1 每年的月票房走势图 图2 年票房总值.上映影片总数及观影人次 图3 单片总票房及日均票房 图4 单片票房及上映月份关系图 在上一部分<[python数据分析实战]电影票房数据分析(一)数据采集> 已经获取到了2011年至今的票房数据,并保存在了mysql中. 本文将在实操中讲解如何将mysql中的数据抽取出来并做成动态可视化. 图1 每年的月票房走势图 第一张图,我们要看一下每月的票房走势,毫无疑问要做成折线图,将近10年的票房数据放在一张图上展示. 数据抽取: 采集到的票房数据是

利用Python数据分析可以实现些什么功能呢?

随着大数据时代的来临和Python编程语言的火爆,Python数据分析早已成为现在职场人的必备核心技能.那么利用Python数据分析可以做什么呢?简单来说,可以做到的内容有很多,比如检查数据表.数据表清洗.数据预处理.数据提取和数据筛选汇总等等.下面来为大家详细讲解一下这些用处 1.检查数据表 Python中使用shape函数来查看数据表的维度,也就是行数和列数.你可以使用info函数查看数据表的整体信息,使用dtypes函数来返回数据格式.Isnull是Python中检验空值的函数,你可以对整

Atitit &#160;数据存储的分组聚合 groupby的实现attilax总结

Atitit  数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计信息来评估3 1.4. 参考资料3 1. 聚合操作 聚合也是我们在写T-SQL语句的时候经常遇到的,我们来分析一下一些常用的聚合操作运算符的特性和可优化项. 1.1. a.标量聚合 流聚合 标量聚合是一种常用的数据聚合方式,比如我们写的语句中利用的以下聚合函数:MAX().MIN().AVG().C