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的print用法示例
Feb 11 Python
用Python编程实现语音控制电脑
Apr 01 Python
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
如何学习Python time模块
Jun 03 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
Python 发送SMTP邮件的简单教程
Jun 24 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 数组基本操作小结(推荐)
2016/06/13 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
理解Python中函数的参数
2015/04/27 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
六一亲子活动总结
2014/07/01 职场文书
治庸问责心得体会
2014/09/12 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
杜甫草堂导游词
2015/02/03 职场文书
高中班主任心得体会
2016/01/07 职场文书
网络研修心得体会
2016/01/08 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python