Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)


Posted in Python onJune 14, 2020

1.单列运算

在Pandas中,DataFrame的一列就是一个Series, 可以通过map来对一列进行操作:

df['col2'] = df['col1'].map(lambda x: x**2)

其中lambda函数中的x代表当前元素。可以使用另外的函数来代替lambda函数,例如:

define square(x): 
  return (x ** 2) 
 
df['col2'] = df['col1'].map(square)

2.多列运算

 apply()会将待处理的对象拆分成多个片段,然后对各片段调用传入的函数,最后尝试将各片段组合到一起。

要对DataFrame的多个列同时进行运算,可以使用apply,例如col3 = col1 + 2 * col2:

df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)

其中x带表当前行,可以通过下标进行索引。

示例2

In [44]: f = lambda x : x.max()-x.min()

In [45]: df.apply(f)
Out[45]:
data1  5.042275
data2  1.967290
dtype: float64

In [46]: df.apply(f,axis=1)
Out[46]:
0  2.810074
1  1.009774
2  0.537183
3  0.813714
4  1.750022
dtype: float64

applymap()

用DataFrame的applymap方法,可以将函数应用到元素级的数据上。

In [47]: f = lambda x : x+1

In [48]: df.applymap(f)
Out[48]:
   data1   data2
0 -1.332263 1.477812
1 0.284755 1.294528
2 0.066644 0.603827
3 1.757402 2.571117
4 3.710012 1.959990

Series也有一个元素级函数应用的方法map

In [49]: df['data1']
Out[49]:
0  -2.332263
1  -0.715245
2  -0.933356
3  0.757402
4  2.710012
Name: data1, dtype: float64

In [50]: df['data1'].map(f)
Out[50]:
0  -1.332263
1  0.284755
2  0.066644
3  1.757402
4  3.710012
Name: data1, dtype: float64

3.分组运算

可以结合groupby与transform来方便地实现类似SQL中的聚合运算的操作:

df['col3'] = df.groupby('col1')['col2'].transform(lambda x: (x.sum() - x) / x.count())

在transform函数中x.sum()与x.count()与SQL类似,计算的是当前group中的和与数量,还可以将transform的结果作为一个一个映射来使用, 例如:

sumcount = df.groupby('col1')['col2'].transform(lambda x: x.sum() + x.count()) 
df['col1'].map(sumcount)

对col1进行一个map,得到对应的col2的运算值。

4.聚合函数

结合groupby与agg实现SQL中的分组聚合运算操作,需要使用相应的聚合函数:

df['col2'] = df.groupby('col1').agg({'col1':{'col1_mean': mean, 'col1_sum‘': sum}, 'col2': {'col2_count': count}})

上述代码生成了col1_mean, col1_sum与col2_count列。

示例2

In [52]: df.agg(['mean','sum'])
Out[52]:
     data1   data2
mean -0.102690 0.581455
sum -0.513449 2.907274

函数 说明
count 分组中非Nan值的数量
sum 非Nan值的和
mean 非Nan值的平均值
median 非Nan值的算术中间数
std,var 标准差、方差
min,max 非Nan值的最小值和最大值
prob 非Nan值的积
first,last 第一个和最后一个非Nan值

到此这篇关于Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)的文章就介绍到这了,更多相关Pandas map apply transform agg内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
初学Python实用技巧两则
Aug 29 Python
详解Python当中的字符串和编码
Apr 25 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
在windows下Python打印彩色字体的方法
May 15 Python
python 文件转成16进制数组的实例
Jul 09 Python
python实现旋转和水平翻转的方法
Oct 25 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
Python调用.net动态库实现过程解析
Jun 05 Python
Python类成员继承重写的实现
Sep 16 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 #Python
pandas创建DataFrame的7种方法小结
Jun 14 #Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 #Python
pandas DataFrame运算的实现
Jun 14 #Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 #Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 #Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 #Python
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php的curl实现get和post的代码
2008/08/23 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php 定义404页面的实现代码
2012/11/19 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php三元运算符知识汇总
2015/07/02 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
python的Template使用指南
2014/09/11 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python 检查文件mime类型的方法
2018/12/08 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
大学秋游活动方案
2014/02/11 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
三人合伙协议书范本
2014/10/29 职场文书
活动费用申请报告
2015/05/15 职场文书
歌剧魅影观后感
2015/06/05 职场文书