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代码实例
Feb 04 Python
python复制文件的方法实例详解
May 22 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
python多线程socket编程之多客户端接入
Sep 12 Python
django输出html内容的实例
May 27 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
python实现学员管理系统
Feb 26 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Python中glob库实现文件名的匹配
Jun 18 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
PHP出错界面
2006/10/09 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python变量访问权限控制详解
2019/06/29 Python
Python3远程监控程序的实现方法
2019/07/15 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
委托证明的格式
2014/01/10 职场文书
销售内勤岗位职责
2014/04/15 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
vue实现滑动解锁功能
2022/03/03 Vue.js
MySQL事务的隔离级别详情
2022/07/15 MySQL