应用函数和返回多列的最pythonic方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了应用函数和返回多列的最pythonic方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1707字,纯文字阅读大概需要3分钟。
内容图文
![应用函数和返回多列的最pythonic方法是什么?](/upload/InfoBanner/zyjiaocheng/789/ca5c5bd46abe4b4282d283d01b17949c.jpg)
在使用Pandas时,我经常会遇到一个现有函数,它接受多个参数并返回多个值:
def foo(val_a, val_b):
"""
Some example function that takes in and returns multiple values.
Can be a lot more complex.
"""
sm = val_a + val_b
sb = val_a - val_b
mt = val_a * val_b
dv = val_a / val_b
return sm, sb, mt, dv
假设我有一个数据帧:
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]])
df
Out[6]:
0 1
0 1 2
1 3 4
2 5 6
3 7 8
我想要的是在df上将foo应用于第0列和第1列作为参数,并将结果放入df的新列中,而不修改foo,如下所示:
df_out
Out[7]:
0 1 su sb mt dv
0 1 2 3 -1 2 0.5
1 3 4 7 -1 12 0.75
2 5 6 11 -1 30 0.833
3 7 8 15 -1 56 0.875
实现这一目标的最pythonic方法是什么?
解决方法:
cols = ['sm','sb','mt','dv']
df[cols] = pd.DataFrame(df.apply(lambda x: foo(x[0], x[1]), 1).values.tolist(),columns= cols)
print (df)
0 1 sm sb mt dv
0 1 2 3 -1 2 0.500000
1 3 4 7 -1 12 0.750000
2 5 6 11 -1 30 0.833333
3 7 8 15 -1 56 0.875000
解决方案concat
cols = ['sm','sb','mt','dv']
df[cols] = pd.concat(foo(df[0], df[1]), axis=1, keys=cols)
print (df)
0 1 sm sb mt dv
0 1 2 3 -1 2 0.500000
1 3 4 7 -1 12 0.750000
2 5 6 11 -1 30 0.833333
3 7 8 15 -1 56 0.875000
也可以创建新的DataFrame然后concat原始:
cols = ['sm','sb','mt','dv']
df1 = pd.concat(foo(df[0], df[1]), axis=1, keys=cols)
print (df1)
sm sb mt dv
0 3 -1 2 0.500000
1 7 -1 12 0.750000
2 11 -1 30 0.833333
3 15 -1 56 0.875000
df = pd.concat([df, df1], axis=1)
print (df)
0 1 sm sb mt dv
0 1 2 3 -1 2 0.500000
1 3 4 7 -1 12 0.750000
2 5 6 11 -1 30 0.833333
3 7 8 15 -1 56 0.875000
内容总结
以上是互联网集市为您收集整理的应用函数和返回多列的最pythonic方法是什么?全部内容,希望文章能够帮你解决应用函数和返回多列的最pythonic方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。