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程序运行效率的6个方法
Mar 31 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
Python实现时钟显示效果思路详解
Apr 11 Python
python实现抽奖小程序
Apr 15 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python可视化text()函数使用详解
Feb 11 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
Javascript倒计时代码
2010/08/12 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python实现简单http服务器
2018/04/12 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python脚本第一行如何写
2020/08/30 Python
python在地图上画比例的实例详解
2020/11/13 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
护理学应聘自荐书范文
2014/02/05 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
甲午风云观后感
2015/06/02 职场文书
承兑汇票延期证明
2015/06/23 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android