找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 235|回复: 6

[已解决] pandas如何更新多列值

1

主题

116

帖子

116

积分

版主

Rank: 7Rank: 7Rank: 7

积分
116

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-2 09:05:16 | 显示全部楼层 |阅读模式
本帖最后由 剑心无痕 于 2017-11-3 13:42 编辑

现在有一个dataframe A,其中有a,b,c,d,e,f六列数据,A['a']是一列数据,长度>10w有一个函数 t(a1,b1,c1) 返回值d1,e1,f1 与A中的列对应,函数t比较复杂需要与数据库交互,时间小于1ms
如何通过函数t更新A中d,e,f三列数据?
遍历A.iterrows()速度太慢,还没有把A转成dict遍历速度快,pandas有没有可以直接通过lambda表达式更新数据的函数?
回复

使用道具 举报

0

主题

64

帖子

64

积分

新手

积分
64
sheeboard 发表于 2017-11-2 09:58:57 | 显示全部楼层
pd.DataFrame.apply()
回复 支持 反对

使用道具 举报

1

主题

116

帖子

116

积分

版主

Rank: 7Rank: 7Rank: 7

积分
116

热心会员默默耕耘优秀版主

剑心无痕  楼主| 发表于 2017-11-2 11:09:23 | 显示全部楼层

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)[source]
apply的func是作用在单列上的,比如列d = func(d) ,而我需要的是列d,e,f = t(a,b,c)
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
shskey 发表于 2017-11-3 11:27:31 | 显示全部楼层
LZ的问题解决了吗?我也有同样的问题,目前只能曲线救国,分步骤来调用apply,比如要实现delta x^2+y^2的值,就弄几个中间值存x^2,y^2,x^2+y^2来达到目的。还是很渴望得到传参的方法呀,呵呵,希望能相互帮助!
回复 支持 反对

使用道具 举报

1

主题

116

帖子

116

积分

版主

Rank: 7Rank: 7Rank: 7

积分
116

热心会员默默耕耘优秀版主

剑心无痕  楼主| 发表于 2017-11-3 13:39:24 | 显示全部楼层
shskey 发表于 2017-11-3 11:27
LZ的问题解决了吗?我也有同样的问题,目前只能曲线救国,分步骤来调用apply,比如要实现delta x^2+y^2的值 ...

已解决,我用的apply,
def t1(row, year):
    row['d'],row['e'],row['f'] = t(row['a'],row['b'],row['c'], year)
    return row

B = A.apply(t1, axis=1, year=2017)
回复 支持 反对

使用道具 举报

1

主题

116

帖子

116

积分

版主

Rank: 7Rank: 7Rank: 7

积分
116

热心会员默默耕耘优秀版主

剑心无痕  楼主| 发表于 2017-11-3 14:19:45 | 显示全部楼层
shskey 发表于 2017-11-3 11:27
LZ的问题解决了吗?我也有同样的问题,目前只能曲线救国,分步骤来调用apply,比如要实现delta x^2+y^2的值 ...

不过A.apply的执行时间还是比A.to_dict()遍历处理再转成df的执行时间多花0.2倍左右
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
shskey 发表于 2017-11-3 18:01:09 | 显示全部楼层
剑心无痕 发表于 2017-11-3 14:19
不过A.apply的执行时间还是比A.to_dict()遍历处理再转成df的执行时间多花0.2倍左右 ...

谢谢回复,按照你的方式,我也实现了。执行时间这点倒还没关注,实现了功能先,再来考虑优化,哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表