07-17 分组聚合--基本的统计方法
分组聚合–主要有以下知识点:
1、描述性统计知识 ,如min() 最小值,max() 最大值,median() --中位数,mead() 均值,quantitle 分位数,quantitle(0.1,0,2,0.5,0.8)分别表示 十分位数,二十分位数,五十分位数--又叫中位数,八十分位数等2、分组运算方法--groupby ,类似于SQL中的groupby方法3、聚合方法--egg,apply和transfrom等
实例如下:
os.chdir('数据存储路径')
sales=pd.read_csv('app.csv',dtype=['year':float])
—将year这一列下的数据读取成浮点型数据
选取想要的列名(因为数据很多很多时我们选取想要的变量)
import pandas as pd
import numpy as np
import os
list=[['2000','89','24','34','78','LOL','900'],['2001','44','34','343','34','LOL','487'],['2008','22','333','34','66','CS','868'],['2010','322','434','342','676','CS','988'],['2018','356','445','666','777','VB','777']]
list
[[‘2000’, ‘89’, ‘24’, ‘34’, ‘78’, ‘LOL’, ‘900’],
[‘2001’, ‘44’, ‘34’, ‘343’, ‘34’, ‘LOL’, ‘487’],
[‘2008’, ‘22’, ‘333’, ‘34’, ‘66’, ‘CS’, ‘868’],
[‘2010’, ‘322’, ‘434’, ‘342’, ‘676’, ‘CS’, ‘988’],
[‘2018’, ‘356’, ‘445’, ‘666’, ‘777’, ‘VB’, ‘777’]]
os.chdir('C:\data')
sales=pd.DataFrame(list,columns=['year', 'n_sale', 's_sale','china_sale', 'e_sale', 'name', 'money'])
sales
year n_sale s_sale china_sale e_sale name money
0 2000 89 24 34 78 LOL 900
1 2001 44 34 343 34 LOL 487
2 2008 22 333 34 66 CS 868
3 2010 322 434 342 676 CS 988
4 2018 356 445 666 777 VB 777
选取想要的数据列
var_name=['year','s_sale','china_sale','money']
#
求均值/最值/等
np.min(sales[var_name],axis=0)
year 2000.0
s_sale 24.0
china_sale 34.0
money 487.0
dtype: float64
sales[var_name].cumsum(axis=0)
选取的数据沿着列想 累加year s_sale china_sale money
0 2000 24 34 900
1 20002001 2434 34343 900487
2 200020012008 2434333 3434334 900487868
3 2000200120082010 2434333434 3434334342 900487868988
4 20002001200820102018 2434333434445 3434334342666 900487868988777
求百分数(后边注明百分之几数)
sales[var_name].quantile([0.2,0.3,0.5,0.7])
所选列的特征值计算
sales.[var_name].describe() year s_sale china_sale money
count 5 5 5 5
unique 5 5 4 5
top 2001 445 34 487
freq 1 1 2 1
字符型 变量的统计
sales.[var_name].describe(include=['object'])year s_sale china_sale money
count 5 5 5 5
unique 5 5 4 5
top 2001 445 34 487
freq 1 1 2 1
分类汇总
按照 ‘年’ 进行分类
groupde=sales.groupby('year')type(groupde)--数据类型的判断pandas.core.groupby.generic.DataFrameGroupBy
groupde---分组对象的内存地址<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000000006D91A08>
每一个条件下的样本个数的统计
groupde.count()
n_sale s_sale china_sale e_sale name money
year
2000 1 1 1 1 1 1
2001 1 1 1 1 1 1
2008 1 1 1 1 1 1
2010 1 1 1 1 1 1
2018 1 1 1 1 1 1
groupde.max()
n_sale s_sale china_sale e_sale name money
year
2000 89 24 34 78 LOL 900
2001 44 34 343 34 LOL 487
2008 22 333 34 66 CS 868
2010 322 434 342 676 CS 988
2018 356 445 666 777 VB 777
groupde.size()
分类下的样本统计year
2000 1
2001 1
2008 1
2010 1
2018 1
dtype: int64
对某一个具体条件(如2001年)下的样本的标记
如:2001年有20个样本,从0标记到19
groupde.cumcount()
0 0
1 0
2 0
3 0
4 0
dtype: int64
通过两个列进行分组
groupde2=sales[names].groupby(by=['name','year'])groupde2
<pandas.core.groupby.generic.DataFrameGroupBy objectat 0x0000000008D87808>groupde2.mean() ---对分组后的每一个变量求均值对于分组所得求得中位数,然后再进行层次化索引查找groupde2.median().loc[([2001,2008],'LOL'),:]
聚合函数-aggregate/apply
agg- agg方法能够对分组对象进行相同的聚合,还可以选择不同的聚合方法
apply--可以进行聚合计算,还可以进行按行计算
transform--返回与数据同样长度的行,无法进行聚合
建议---今后更多使用apply或者 agg
names=['n_sale','china_sale','name']--选取需要的列
groupd=sales[names].groupby('name')按 name 分组
groupd.agg([np.mean,np.sum]).head(10)-对分组后的进行求均值,求总合,且只查看前十行groupd.agg([np.mean,np.sum]).loc[[2001,2008],('n-sales',['mean','sum'])]-----对列的层次化引用注意: 行索引 和 列索引 一起时用‘,’ 逗号分开,一般逗号前为行索引,之后为列索引
对不同的变量输出不同统计量
groupde.agg({'n_sales':np.mean,'s_sale':np.sum})
对不同的变量求多个不同的统计值
groupde.agg({'n_sales':[np.mean,np.median],'s_sale':[np.sum,np.mean})
还可以计算自定义函数
def doublesum(data):s=data.sum*10return sgroupd.agg({'s_sale':doublesum})
对某一个变量求和后2 == 先求和再2
如:
sales.['year'].sum()*2 == sales.agg({'year':doublesum})
apply
apply函数比agg函数,可以设定轴向 axis=0/1
sales.apply(np.sum,axis=0)year 20002001200820102018
n_sale 894422322356
s_sale 2434333434445
china_sale 3434334342666
e_sale 783466676777
name LOLLOLCSCSVB
money 900487868988777
dtype: object
第二列-第三列
sales[names].apply(lambda x: x[1]-x[2],axis=1)
transform函数
transform函数常用语对数据中每一个元素进行操作,不能对行进行操作,队列可以操作,但是不常用;
如:
sales.transform(lambda x: x*2)---对每一个元素进行操作year n_sale s_sale china_sale e_sale name money
0 20002000 8989 2424 3434 7878 LOLLOL 900900
1 20012001 4444 3434 343343 3434 LOLLOL 487487
2 20082008 2222 333333 3434 6666 CSCS 868868
3 20102010 322322 434434 342342 676676 CSCS 988988
4 20182018 356356 445445 666666 777777 VBVB 777777
对列进行操作
对所选列的每一个元素进行操作sales[var_name].transform(lambda x: x*2)
07-17 分组聚合--基本的统计方法相关推荐
- Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)
目录 一.概念 二.举例 2.1 COUNT函数 2.1.1 语法 2.1.2运行结果 2.2 AVG函数 2.2.1语法 2.2.2运行结果 2.3 SUM函数 2.3.1语法 2.3.2运行结果 ...
- pandas数据分组聚合——groupby()、aggregate()、apply()、transform()和filter()方法详解
数据分组 数据分组就是根据一个或多个键(可以是函数.数组或df列名)将数据分成若干组,然后对分组后的数据分别进行汇总计算,并将汇总计算后的结果进行合并,被用作汇总计算的函数称为聚合函数.数据分组的具体 ...
- elasticsearch(7)聚合统计-分组聚合
原文:https://blog.csdn.net/sz85850597/article/details/82858831 elasticsearch(7)聚合统计-分组聚合 2018年09月26日 2 ...
- Java调用ElasticSearch 7.2.1 保存、统计、多字段分组聚合
目录 maven引用 配置 配置类 保存数据方法 参照官方的引用方式会报错 分组统计 查询后再统计 多字段分组聚合 maven引用 注意版本与es版本一致 <dependency>< ...
- 【Pandas分组聚合】 groupby()、agg() 方法的使用
Pandas分组聚合 创建一个dataframe结构 分组函数 groupby() 初识分组聚合 多重行索引分组聚合 对多列数据进行分组聚合 综合应用 聚合函数 agg(aggregate) 求 多列 ...
- pandas使用groupby函数进行分组聚合、使用agg函数指定聚合统计计算的数值变量、并自定义统计计算结果的名称(naming columns after aggregation)
pandas使用groupby函数进行分组聚合.使用agg函数指定聚合统计计算的数值变量.并自定义统计计算结果的名称(naming columns after aggregation in dataf ...
- pandas使用groupby函数对dataframe进行分组统计、使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index)
pandas使用groupby函数对dataframe进行分组统计.使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index) 目录
- pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)
pandas使用groupby函数按照多个分组变量进行分组聚合统计.使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe) 目录
- python pandas聚合_Python Pandas分组聚合的实现方法
Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame ...
最新文章
- 2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理
- Hibernate保存数据自动生成主键出现奇怪异常Duplicate entry '0' for key 1
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- 【病毒】开机弹出“tlntsvi_6635.exe程序”解决方案
- url安全处理函数+php,php常用的url处理函数汇总
- 乡村振兴专题:农村面板数据3.0
- 什么是嵌入式开发?嵌入式是什么?初学者必看。
- HTTP中的TCP三次握手-详细解析(TCP Connection、TCP的三次握手介绍、为什么创建TCP三次握手)
- JVM-深入理解JVM内存模型、类加载机制、内存分配机制
- img元素实现图片裁切放大
- 数据库04—约束条件
- 时间都哪去了--电视连续剧《老牛家的战争》插曲【视频】
- pdf转换成html后打印不清晰,图片转换成pdf后很模糊不清晰怎么办?
- 非常详细的微信跳一跳“黑科技”脚本
- linux终端基本操作命令
- kubectl命令使用滚动更新和回滚
- JavaWeb项目中使用到的过滤器
- 下载个PDF居然还要密码?想要密码就付费?这我能忍你!Python分分钟解密它!
- [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)
- 阿里的“传奇程序员”