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实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
python requests爬取高德地图数据的实例
Nov 10 Python
python实现事件驱动
Nov 21 Python
python实现nao机器人手臂动作控制
Apr 29 Python
python是否适合网页编程详解
Oct 04 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
python的sys.path模块路径添加方式
Mar 09 Python
Python文件操作基础流程解析
Mar 19 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
pandas 按日期范围筛选数据的实现
Feb 20 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做推送服务端实现ios消息推送
2013/07/01 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
JS定时器实例详细分析
2013/10/11 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python使用super()出现错误解决办法
2017/08/14 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python多线程扫描端口(线程池)
2019/09/04 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
纽约手袋品牌:KARA
2018/03/18 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
学生鉴定评语大全
2014/05/05 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
优秀教师申报材料
2014/12/16 职场文书
会议主持词开场白
2015/05/28 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技