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编写生成验证码的脚本的教程
May 04 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
PyQt5固定窗口大小的方法
Jun 18 Python
django-rest-swagger的优化使用方法
Aug 29 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
Django实现前台上传并显示图片功能
May 29 Python
Python多分支if语句的使用
Sep 03 Python
Python的这些库,你知道多少?
Jun 09 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读取RSS feed的代码
2008/08/01 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
php文件上传类的分享
2017/07/06 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python根据路径导入模块的方法
2014/09/30 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
python实现经典排序算法的示例代码
2021/02/07 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
团支部推优材料
2014/05/21 职场文书
就业协议书样本
2014/08/20 职场文书
个人先进材料范文
2014/12/30 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS