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 18 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
Django用户认证系统 User对象解析
Aug 02 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python itertools.product方法代码实例
Mar 27 Python
Python编写万花尺图案实例
Jan 03 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
JS实现图片预览的两种方式
2017/06/27 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
python继承和抽象类的实现方法
2015/01/14 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Flask之flask-script模块使用
2018/07/26 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
python 代码运行时间获取方式详解
2020/09/18 Python
红领巾心向党广播稿
2014/01/19 职场文书
岗位说明书范文
2014/05/07 职场文书
保护野生动物倡议书
2014/05/16 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年后备干部工作总结
2015/05/15 职场文书