python-pandas11-数据聚合-分组计算
2020-08-25 20:53
204 查看
pandas-数据聚合-分组计算
导入模块
import numpy as np import pandas as pd from pandas import Series,DataFrame from numpy import nan as NA import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
先创建一个DataFrame和一个Series
df1 = DataFrame( { 'key1':list('aabba'), 'key2':'one,two,one,two,one'.split(','), 'data1':np.random.randint(0,10,5), 'data2':np.random.randint(0,10,5) } ) df1
s1 = df1['data1'] s1
1.Series.groupby
按照某个series 进行分组,返回一个分组后的对象
通俗来说就是将df1按照key1列分组,返回df1里data1这列也就是s1的值
s1.groupby(df1.key1)
可以用list() 转换,查看结构 .可以知道分组对象的每个值都是 分组依据和分组结果
list(s1.groupby(df1.key1))
分组对象是可以 直接 使用 聚合(统计)函数
s1.groupby(df1.key1).sum()
s1.groupby(df1.key1).mean()
s1.groupby(df1.key1).count()
2.DataFrame.groupby
按照df1的key2列分组,返回整个df1分组后的值
df1.groupby(df1.key2)
list(df1.groupby(df1.key2))
如果分组依据来自本身的某列,可以直接用列名称
list(df1.groupby('key2'))
可以用其他 独立的 Series 进行分组
list(df1.groupby( Series(['c','c','d','d','d']) ))
可以直接使用聚合函数
df1.groupby( Series(['c','c','d','d','d']) ).sum()
df1.groupby( Series(['c','c','d','d','d']) ).max()
3.使用多个依据进行分组
DataFrame.groupby( [Series1, Series2,…] )
如果 Series(mapper)来自本身,可以直接使用列名称
DataFrame.groupby( [columnName1, columnName2,…] )
list(df1.groupby([df1.key1 ,df1.key2]))
list(df1.groupby(['key1','key2']))
聚合函数
df1.groupby(['key1','key2']).sum()
4.假设有很多列,只需要一两列进行分组与计算。
df2 = DataFrame( np.random.randint(0,10,(10,10)), columns=list('ABCDEFGHIJ') ) df2.insert(0,'key2','one,two,one,two,one'.split(',')*2) df2.insert(0,'key1',list('aabbc')*2) df2
如果需要分组计算的列并不多,我们可以
1-整体分组计算,然后取需要的列得到结果
2-先取需要的列,再进行分组计算
假设 取 A B 列计算数据
# 1- 整体分组计算 df2.groupby(['key1','key2']).sum()
# 1- 再取需要的列 df2.groupby(['key1','key2']).sum()[['A','B']]
# 2-先取需要的列,df2[['A','B']] 没有明显的分组依据,需要指明 mapper df2[['A','B']].groupby([df2.key1,df2.key2]).sum()
5.分组对象,还可以转为list后再转为字典
grouped3 = df2[['key1','key2','A','B']].groupby(['key1','key2']) grouped3
dict(list(grouped3))
# 两种写法 dict(list(grouped3)).get( ('b','two') ) dict(list(grouped3))[('b','two')]
还可以根据列类型进行分组
df1
# 查看 df1 的列类型 df1.dtypes
list(df1.groupby(df1.dtypes,axis=1))
6.xxx.astype( yy ) xxx对象的值转为 yy类型
df1.data2.astype(float)
7.可以按照 一列或 多列进行分组
如 key1 就是一列的值 ,其实是按行分,如 key1,key2 就是2列 的值 ,也是按行分
按列分组 ,如 按照类型分 dtype ,axis=1
# 读取 成绩.csv 前10个人的信息,姓名作为 行索引,学科作为列索引 data = pd.read_csv('成绩.csv' ,index_col='Unnamed: 0') # 预览下前5条 。 xxx.head() data.head()
我们可以使用字典分组 用字典给每列取一个 别名 。
如 :语数外为主科,其他的为副科
mapping = {'语文':'主科','数学':'主科'}
方法1:创建2个字典在组合成二维列表,再转为字典
方法2 : 直接循环
方法3
8.其他聚合函数
9.自定义函数应用到对象上
相关文章推荐
- python之数据聚合及分组运算
- python/pandas数据挖掘(十四)-groupby,聚合,分组级运算
- Python数据分析基础(七)——数据聚合与分组
- Python之数据聚合与分组运算
- Python数据分析之数据聚合与分组运算(拆分、应用、合并)
- 大数据日志分析系统-python脚本利用es聚合计算
- python 数据聚合与分组
- 利用python进入数据分析之数据聚合与数据分组运算
- 利用python进行数据分析-数据聚合与分组运算2
- python/pandas数据分析(十五)-聚合与分组运算实例
- 利用python进行数据分析-数据聚合与分组运算1
- python的数据分析:pandas的分组聚合
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
- 利用Python进行数据分析--数据聚合与分组运算
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
- python数据分析之:数据聚合与分组运算
- 利用python进行数据分析之数据聚合和分组运算
- 《利用python进行数据分析》 第9章 数据聚合与分组计算
- python|jupyter|pandas|4.4使用分组聚合进行组内计算
- python中数据聚合与分组运算