pandas分组统计:groupby,melt,pivot_table,crosstab的用法
groupby: 分组
melt: 宽表转长表
pivot_table: 长表转宽表,数据透视表
crosstab: 交叉表 / 列联表,主要用于分组频数统计
- import numpy as np
- import pandas as pd
- df = pd.DataFrame({'key1':['a','a','b','b','a'],
- 'key2':['one','two','one','two','one'],
- 'data1':np.random.randn(5),
- 'data2':np.random.randn(5)
- })
- # key1 key2 data1 data2
- #0 a one 0.498857 0.074495
- #1 a two 2.872086 -1.303973
- #2 b one -0.721171 -1.315390
- #3 b two 0.985844 0.419780
- #4 a one -0.134534 -0.732861
- # ####################
- '''groupby 用法'''
- group1 = df.groupby('key1')
- group2 = df.groupby(['key1','key2'])
- [x for x in group1]
- group1.size()
- group1.sum()
- group2.count()
- group1['data1','data2'].agg(['mean','sum']) #作用于所有列
- group2(['key1','key2']).apply(lambda x: pd.Series([x.shape[0], x['key1'].mean(), x['key2'].sum()],
- index=['counts', 'key1_mean', 'key2_sum'])) #作用于指定列
- # ####################
- ''' melt 用法 -- 宽表转长表 '''
- pd.melt(df, id_vars=['key1', 'key2'], value_vars=['data1', 'data2'], var_name='var', value_name='value') #col_level
- # key1 key2 var value
- #0 a one data1 0.498857
- #1 a two data1 2.872086
- #2 b one data1 -0.721171
- #3 b two data1 0.985844
- #4 a one data1 -0.134534
- #5 a one data2 0.074495
- #6 a two data2 -1.303973
- #7 b one data2 -1.315390
- #8 b two data2 0.419780
- #9 a one data2 -0.732861
- # ####################
- ''' crosstab 用法 -- 列联表(count) '''
- pd.crosstab(df.key1, df.key2, margins=True)
- #key2 one two All
- #key1
- #a 2 1 3
- #b 1 1 2
- #All 3 2 5
- # ####################
- ''' pivot_table 用法 -- 长表转宽表 '''
- # pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None,
- # dropna=True, margins=False, margins_name='ALL') #aggfunc={'d':np.sum, 'e':np.max}
- pd.pivot_table(df, index='key1', columns='key2')
- # data1 data2
- #key2 one two one two
- #key1
- #a 0.182162 2.872086 -0.329183 -1.303973
- #b -0.721171 0.985844 -1.315390 0.419780
- df.pivot_table(['data1'], index='key1', columns='key2', fill_value=0) #['data1']
- # data1
- #key2 one two
- #key1
- #a 0.182162 2.872086
- #b -0.721171 0.985844
参考链接:
Pandas:透视表(pivotTab)和交叉表(crossTab)
Pandas分组统计函数:groupby、pivot_table及crosstab
pandas分组统计:groupby,melt,pivot_table,crosstab的用法的更多相关文章
- Pandas分组(GroupBy)
任何分组(groupby)操作都涉及原始对象的以下操作之一.它们是 - 分割对象 应用一个函数 结合的结果 在许多情况下,我们将数据分成多个集合,并在每个子集上应用一些函数.在应用函数中,可以执行以下 ...
- pandas 分组统计
# coding:utf-8 import pandas as pd import numpy as np # path = r'C:\Users\wuzaipei\Desktop\桂林三金项目签到情 ...
- Pandas分组统计函数:groupby、pivot_table及crosstab
利用python的pandas库进行数据分组分析十分便捷,其中应用最多的方法包括:groupby.pivot_table及crosstab,以下分别进行介绍. 0.样例数据 df = DataFram ...
- Pandas分组运算(groupby)修炼
Pandas分组运算(groupby)修炼 Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby() ...
- pandas聚合和分组运算——GroupBy技术(1)
数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...
- pandas处理csv,分组统计
需求: /tmp/demo/data下有10个csv文件,按col0和col1分组分别统计col2和col3总和并计算col2和col3的商 # encoding:utf-8 import panda ...
- DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法
DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...
- C# Linq及Lamda表达式实战应用之 GroupBy 分组统计
在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...
- Python Pandas分组聚合
Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame ...
随机推荐
- AcWing 800. 数组元素的目标和
网址 https://www.acwing.com/solution/AcWing/content/2064/ 题目描述给定两个升序排序的有序数组A和B,以及一个目标值x,请你求出满足A[i] + B ...
- acwing 25. 剪绳子
习题地址 https://www.acwing.com/problem/content/description/24/ 题目描述 给你一根长度为 nn 绳子,请把绳子剪成 mm 段(mm.nn 都是整 ...
- 16-DRF工程搭建与序列化器
1.DRF工程搭建 环境安装与配置 DRF是以Django扩展应用的方式提供的,所以我们可以直接利用Django环境,而无需创建(先创建Django环境). 1.安装DRF pip3 install ...
- ASP.NET中WebService的创建和部署以及通过反射动态调用WebService
一.在ASP.NET中创建WebService 首先我们先创建一个ASP.NET Web 应用程序,此处我们以VS2017为例 点击新创建的项目,右键添加新建项,选择Web服务,输入名称后点击添加 这 ...
- SQLPrompt8.2 安装之后找不到激活入口
如果你发现是这样的,找不到像其他人说的serial number这个选项,不要惊慌.. 首先你得先断网,然后再打开sql客户端,点击Manage License ,然后你会看到 activate 这个 ...
- Javase之多线程(1)
多线程(1) 多线程的概述 了解多线程之前需要先了解线程,而线程依赖于进程而存在,所以先了解进程. 什么是进程 进程就是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空 ...
- 高强度学习训练第九天总结:5道剑指offer的题目
实在不想看JVM了.刷几道剑指Offer的题,今天就水一水吧,脑子迷糊. 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增 ...
- HTML5新标签与特性---新表单+新属性----综合案例1
HTML5新标签与特性 兼容性问题 (ie9 以上的版本) 文档类型设定 document HTML: sublime 输入 html:4s XHTML: sublime 输入 html:xt HTM ...
- Tasteless challenges medium WP
http://chall.tasteless.eu/ 国外的一个靶场,都是单点知识,medium大部分还是比较简单 medium Level 1- Infiltration http://chall. ...
- 为Dynamics CRM注释的图片附件做个预览功能
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复163或者20151017可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM中注释可 ...