项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.分组groupby

在日常数据分析过程中,经常有分组的需求。具体来说,就是根据一个或者多个字段,将数据划分为不同的组,然后进行进一步分析,比如求分组的数量,分组内的最大值最小值平均值等。在sql中,就是大名鼎鼎的groupby操作。
pandas中,也有对应的groupby操作,下面我们就来看看pandas中的groupby怎么使用。

2.groupby的数据结构

首先我们看如下代码

def ddd():levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"]nums = [10, 20, 30, 20, 15, 10, 12]df = pd.DataFrame({"level": levels, "num": nums})g = df.groupby('level')print(g)print()print(list(g))

输出结果如下:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x10f6f96d0>[('L1',   level  num
0    L1   10
1    L1   20
2    L1   30), ('L2',   level  num
3    L2   20
4    L2   15), ('L3',   level  num
5    L3   10
6    L3   12)]

做groupby操作以后,得到的是一个DataFrameGroupBy对象,直接打印该对象的话,显示的是其内存地址。
为了方便地观察数据,我们使用list方法转换一下,发现其是一个元组,元组中的第一个元素,是level的值。元祖中的第二个元素,则是其组别下的整个dataframe。

3.groupby的基本用法

def group1():levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"]nums = [10, 20, 30, 20, 15, 10, 12]scores = [100, 200, 300, 200, 150, 100, 120]df = pd.DataFrame({"level": levels, "num": nums, "score": scores})result = df.groupby('level').agg({'num': 'sum', 'score': 'mean'})allnum = result['num'].sum()result['rate'] = result['num'].map(lambda x: x / allnum)print(result)

最后输出:

       num  score      rate
level
L1      60    200  0.512821
L2      35    175  0.299145
L3      22    110  0.188034

上面的例子展示了groupby的基本用法。
对dataframe按照level分组,然后对num列求和,对score列求平均值,可以得到result。
同时,我们还希望得到每个分组中,num的和在所有num和中的占比。于是我们先求num的综合,然后在用map方法,给result添加一列,求得其占比!

4.transform的用法

下面我们看一个更复杂的例子。

def t10():levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"]nums = [10, 20, 30, 20, 15, 10, 12]df = pd.DataFrame({"level": levels, "num": nums})ret = df.groupby('level')['num'].mean().to_dict()df['avg_num'] = df['level'].map(ret)print(ret)print(df)
{'L1': 20.0, 'L2': 17.5, 'L3': 11.0}level  num  avg_num
0    L1   10     20.0
1    L1   20     20.0
2    L1   30     20.0
3    L2   20     17.5
4    L2   15     17.5
5    L3   10     11.0
6    L3   12     11.0

上面的方法,我们对level分组以后,我们想给数据集添加一列,想给每行数据添加每个level对应的平均值。
上面的解法是先求得每个分组的平均值,转成一个dict,然后再使用map方法将每组的平均值添加上去。

def trans():levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"]nums = [10, 20, 30, 20, 15, 10, 12]df = pd.DataFrame({"level": levels, "num": nums})df['avg_num'] = df.groupby('level')['num'].transform('mean')print(df)

如果使用transform方法,代码可以更简单更直观,如上所示。

transform方法的作用:调用函数在每个分组上产生一个与原df相同索引的dataFrame,整体返回与原来对象拥有相同索引且已填充了转换后的值的dataFrame,相当于就是给原来的dataframe添加了一列。

pandas groupby 用法详解相关推荐

  1. [Python3]pandas.merge用法详解

    摘要 数据分析与建模的时候大部分时间在数据准备上,包括对数据的加载.清理.转换以及重塑.pandas提供了一组高级的.灵活的.高效的核心函数,能够轻松的将数据规整化.这节主要对pandas合并数据集的 ...

  2. Pandas教程 | 超好用的Groupby用法详解

    总结: 对agg而言,会计算得到A,B,C公司对应的均值并直接返回,但对transform而言,则会对每一条数据求得相应的结果,同一组内的样本会有相同的值,组内求完均值后会按照原索引的顺序返回结果; ...

  3. Pandas中loc和iloc函数用法详解(源码+实例)

    loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行) iloc函数:通过行号来取行数据(如取第二行 ...

  4. groupby函数详解

    pandas中groupby函数用法详解 1 groupby()核心用法 2 groupby()语法格式 3 groupby()参数说明 4 groupby()典型范例 5 groupby常见的调用函 ...

  5. python 折线图 尾部_Matplotlib 折线图plot()所有用法详解

    散点图和折线图是数据分析中最常用的两种图形.其中,折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况. Matplotlib 中绘制 ...

  6. python explode_pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...

  7. blankcount函数python,Python pandas常用函数详解

    本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名, ...

  8. python iloc用法_pandas.DataFrame.loc和.iloc用法详解

    .loc[ ]与.iloc[ ]用法详解 目录 pandas.DataFrame.loc    pandas.DataFrame.iloc 注意 通过.loc[ ]或者.iloc[ ]获取数据时需要注 ...

  9. python dataframe index loc_基于DataFrame筛选数据与loc的用法详解

    DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. ...

  10. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解

    1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...

最新文章

  1. 使用PCAST检测散度以比较GPU和CPU结果
  2. 使用ajax追加样式没,ajax-动态添加内容后,jQuery Mobile不应用样式
  3. A*寻径算法新手入门(转载)
  4. python实现图片文件批处理
  5. B00013 字符串哈希函数
  6. 天猫HTML练手项目,GitHub - txz1220/tianmao: 一个模仿天猫网页的项目
  7. python mssql bulk_SqlBulkCopy:批量插入SqlServer的利器
  8. vue在html中写style,vue开发之style(六)(CSS页面布局之样式、背景、文字)
  9. 用python做逻辑回归_python实现逻辑回归
  10. java 分布式事务处理
  11. 21天jmeter打卡day2-环境搭建
  12. c语言输出英文字母表,菜鸟求助,写一个随机输出26个英文字母的程序
  13. 2019年3月PMP考试技巧及答题技巧介绍
  14. win10用一会就蓝屏重启_win10蓝屏memory management原因以及解决方法
  15. 矩阵连乘积问题--动态规划
  16. 解决:香橙派orangepi3lts网口用不了 网口灯不亮 没反应
  17. vb.net 简单登录界面(三层架构思想)
  18. 泰坦尼克号任务-模型建立和评估
  19. Java做简单的界面
  20. 【arXiv2022】GroupTransNet: Group Transformer Network for RGB-D Salient Object Detection

热门文章

  1. 在Java中如何高效判断数组中是否包含某个元素
  2. python集成包地址 Anaconda 一键安装拥有所有包
  3. 这种情况,支付宝转账可撤回了!一定要会
  4. VC++多线程--进程间通信
  5. Spring 读取配置文件中的配置
  6. 热点:阿里云推国内首个高级政务云平台
  7. CSS3魔法堂:说说Multi-column Layout
  8. 加载等待loading
  9. 物件捆绑 背包问题 动态规划 求解
  10. C语言的 typedef 关键字