Python之分组级运算——【transform()方法、apply()方法】

文章目录

  • 数据转换——transform()方法
  • 数据应用——apply()方法


数据转换——transform()方法

使用aggregate()方法进行聚合运算已经在上一篇博客中详细阐述,我们知道aggregate()方法返回的数据集的形状(shape)与被分组的数据集的形状是不同的,如果希望保持与原数据数据集形状相同,则可以通过transfrom()方法实现。

transform(self, func, *args, **kwargs)

上述方法中只有一个func参数,表示操作Pandas对象的函数,该函数可以是内置方法也可以是自定义函数。

transform()方法返回的结果有两种:

  • 一种是可以广播的标量值(np.mean)
  • 一种可以是与分组大小相同的结果数组

通过transfrom()方法操作分组时,该方法回将func()函数应用到各个分组中,并且将结果放在适当的位置上。

下面通过实例来进一步了解该方法的具体功能。


创建测试对象:

import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(25).reshape(5, 5),index=list([0, 1, 2, 3, 4]),columns=list('abcde'))
df['key'] = pd.Series(data=list('AABBB'), name='key')
print(df)

输出结果:

    a   b   c   d   e key
0   0   1   2   3   4   A
1   5   6   7   8   9   A
2  10  11  12  13  14   B
3  15  16  17  18  19   B
4  20  21  22  23  24   B

以key列进行分组,可以将df对象拆分成A、B两组,将mean()方法应用到每个分组中,计算每个分组中每列的平均值。

代码如下:

df_group = df.groupby('key').transform('mean')
print(df_group)

输出结果:

      a     b     c     d     e
0   2.5   3.5   4.5   5.5   6.5
1   2.5   3.5   4.5   5.5   6.5
2  15.0  16.0  17.0  18.0  19.0
3  15.0  16.0  17.0  18.0  19.0
4  15.0  16.0  17.0  18.0  19.0

从输出结果可以看出,每列的数据是各分组求得的平均数。操作过程是通过mean()方法算出均值(一个标准量)后将其广播。


不难发现上述示例中,原始数据的列数与最终结果的列数是不一样的。

如果希望原始数据的列数与最终结果的列数是一样的。那么需要创建一个Series对象作为分组键,而不是将原始数据中的列作为分组键。

创建测试对象:

df1 = DataFrame(np.arange(20).reshape(5, 4))
print(df1)

输出结果:

    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19

然后创建一个列表key,key的长度需要与df1对象的行数是一样的,我们将key当作分组键,然后对每个分组执行求平均值的操作。

代码如下:

key = ['one', 'one', 'two', 'two', 'two']
df1_group = df1.groupby(by=key).transform('mean')
print(df1_group)

输出结果:

    0   1   2   3
0   2   3   4   5
1   2   3   4   5
2  12  13  14  15
3  12  13  14  15
4  12  13  14  15

数据应用——apply()方法

apply()方法的使用十分灵活,它可以作用于DataFrame中的每一列、每一行元素,还可以在许多标准用例中代替聚合和转换。

测试对象:

    a   b   c   d   e key
0   0   1   2   3   4   A
1   5   6   7   8   9   A
2  10  11  12  13  14   B
3  15  16  17  18  19   B
4  20  21  22  23  24   B

运用apply()方法的代码如下:

df_by_group = df.groupby('key')def plus_ten(data_frame):return data_frame.iloc[:, :5] + 10df_by_group_apply = df_by_group.apply(func=plus_ten)
print(df_by_group_apply)

输出结果:

    a   b   c   d   e
0  10  11  12  13  14
1  15  16  17  18  19
2  20  21  22  23  24
3  25  26  27  28  29
4  30  31  32  33  34

也可以用内置方法进行数据应用:

df1_by_group_apply1 = df.iloc[:, :5].apply(func='mean')
print("df1_apply:\n", df1_by_group_apply1)

输出结果:

df1_apply:a    10.0
b    11.0
c    12.0
d    13.0
e    14.0
dtype: float64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java限制在同一台电脑上只允许有一个用户登录系统

在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制。 具体一点就是: 1、在同一台电脑上一次只允许有一个用户登录系统; 2、一个用户在同一时间只允许在一个客户端登录…

Matplotlib——绘制图表

文章目录通过figure()函数创建画布通过subplot()函数创建单个子图通过subplots()函数创建多个子图通过add_subplot()方法添加和选中子图添加各类标签绘制常见图表绘制直方图——hist()函数绘制散点图——scatter()函数绘制柱状图——bar()函数设定线条的相关参数本地保存图片通…

限制在同一台电脑上只允许有一个用户登录系统

在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制。 具体一点就是: 1、在同一台电脑上一次只允许有一个用户登录系统; 2、一个用户在同一时间只允许在一个客户端登录…

Seaborn——绘制统计图形

文章目录可视化数据的分布绘制单变量分布绘制双变量分布绘制成对的双变量分布用分类数据绘图类别散点图通过stripplot()函数画散点图swarmplot()函数类别内的数据分布绘制箱型图绘制提琴图类别内的统计估计绘制条形图绘制点图可视化数据的分布 绘制单变量分布 一般采用最简单…

Bokeh——交互式可视化库

文章目录前言如何通过Plotting绘制图形前言 Bokeh是一个专门针对Web浏览器使用的交互式可视化库,这是与其他可视化库相比最核心的区别。 如何通过Plotting绘制图形 Plotting是以构建视觉符号为核心的接口,可以结合各种视觉元素(例如&#x…

指针、引用以及const限定符、constexpr限定符

文章目录复合类型引用概念与使用引用的定义注意指针概念声明方式取地址符指针值空指针利用指针访问对象赋值和指针void* 指针指向指针的指针指向指针的引用初始化所有指针有多重含义的某些符号const限定符概念const的引用指针和const顶层const和底层constconstexpr和常量表达式…

关键字typedef、关键字using、auto类型说明符和declytpe类型指示符

文章目录类型别名概念关键字 typedef别名声明 (alias declaration) using指针、常量和类型别名类型别名简化多维数组指针auto类型说明符概念复合类型、常量和autodecltype类型指示符概念decltype和引用类型别名 概念 有两种方法可用于定义类型别名。 关键字 typedef typede…

初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化

文章目录初始化和赋值的区别什么是默认初始化?列表初始化列表初始化的使用场景不适合使用列表初始化的场景类内初始值混用string对象和C风格字符串数组与vector对象关于vector对象两者间的初始化关系直接初始化与拷贝初始化初始化和赋值的区别 初始化的含义是创建变…

js动态增加,删除td,tr,table,div

js实现的动态添加,删除table内容: 截图如下: 1. 2. 源代码: main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string类的相关知识及部分操作

文章目录string对象的初始化string::size_type类型string对象的读写操作使用标准库中的iostream使用getline读取一整行string对象的比较操作string对象的相加操作两个string对象相加字面值和string对象相加string对象的初始化 拷贝初始化(copy initialization):使用…

数组的部分练习

3.27:假设txt_size是一个无参数的函数,它的返回值是int。请回答下列哪个定义是非法的?为什么? unsigned buf_size1024; (a)int ia[buf_size];  (b)int ia[4*7-14]; &#xff08…

关于范围for语句的使用

文章目录使用范围for语句处理多维数组使用范围for语句处理多维数组 举个例子&#xff0c;使用范围for语句输出多维数组&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循环中并没有任何…

vector的应用练习

文章目录编写一段程序&#xff0c;使用条件运算符从vector< int >中找出哪些元素的值是奇数&#xff0c;然后将奇数值翻倍。 #include <iostream> #include <ctime> #include <vector> using namespace std; typedef int int_array[4]; int main() {v…

sizeof运算符运算结果小汇

文章目录sizeof运算符的结果部分地依赖于其作用的类型sizeof运算符的结果部分地依赖于其作用的类型 对char或者类型为char的表达式执行sizeof运算&#xff0c;结果得1对引用类型执行sizeof运算得到被引用对象所占空间的大小对指针执行sizeof运算得到指针本身所占空间的大小对解…

jQuery实现复选框的全选和反选:

jQuery实现复选框的全选和反选&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit

文章目录C语言类型转换隐式类型转换显式类型转换C 强制类型转换static_castreinterpret_castconst_castdynamic_cast类的隐式类型转换概念只允许一步类类型转换explicit 抑制构造函数定义地隐式转换可以通过显式转换使用explicit构造函数C语言类型转换 隐式类型转换 编译器在…

string对象和C风格字符串

混用string对象和C风格字符串 我们都知道允许使用字符串字面值来初始化string对象&#xff1a; string s("Hello World!");C规定&#xff0c;任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代&#xff1a; 允许使用以空字符结束的字符数组来初始化…

函数重载、引用再探、内联函数

文章目录函数重载为什么C支持重载&#xff0c;C语言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用场景引用和指针引用和指针的不同点:内联函数什么是内联函数&#xff1f;内联函数的特性内联函数的好处类的内联成员函数的声明内联函数的使用constexpr函数概念…

类的概念、成员函数的定义方式、类的访问控制和封装、类的大小、this指针

文章目录类的概念structclassclass和struct的区别是什么呢&#xff1f;类中成员函数的两种定义方式声明和定义都在类中声明和定义分离类的访问控制和封装类的封装特性类的大小结构体内存对齐规则类的存储方式this指针类的概念 在C中&#xff0c;类可以说是最重要的东西&#x…

jQuery实现两个列表框的值之间的互换:

jQuery实现两个列表框的值之间的互换&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…