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提取内容关键词的方法
Mar 16 Python
python文件与目录操作实例详解
Feb 22 Python
python 容器总结整理
Apr 04 Python
基于python进行桶排序与基数排序的总结
May 29 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Python基础之文件读取的讲解
Feb 16 Python
python 自定义装饰器实例详解
Jul 20 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
python中数字是否为可变类型
Jul 08 Python
Python lambda表达式原理及用法解析
Aug 18 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查询域名状态whois的类
2006/11/25 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
python实现查询苹果手机维修进度
2015/03/16 Python
Python实现字典依据value排序
2016/02/24 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
英文版网络工程师求职信
2013/10/28 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
人事经理岗位职责
2014/04/28 职场文书
团组织关系介绍信
2019/06/24 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js