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实现的使用telnet登陆聊天室实例
Jun 17 Python
在Python的Django框架中生成CSV文件的方法
Jul 22 Python
在Django的session中使用User对象的方法
Jul 23 Python
python随机数分布random测试
Aug 27 Python
Python基础教程之异常详解
Jan 10 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
简单了解python数组的基本操作
Nov 26 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python随机数函数代码实例解析
Feb 09 Python
python函数map()和partial()的知识点总结
May 26 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 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
DSP接收机前端设想
2021/03/02 无线电
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP查询网站的PR值
2013/10/30 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
php微信支付接口开发程序
2016/08/02 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
Python 探针的实现原理
2016/04/23 Python
Django开发中的日志输出的方法
2018/07/02 Python
python得到windows自启动列表的方法
2018/10/14 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python sorted对list和dict排序
2020/06/09 Python
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
C#笔试题集合
2013/06/21 面试题
幼儿评语大全
2014/04/30 职场文书
代理人委托书
2014/09/16 职场文书
社区端午节活动总结
2015/02/11 职场文书
工作一年自我鉴定
2019/06/20 职场文书