Dataframe应用方法返回多个元素(系列)

2024-10-01 13:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd

假设我有一个dataframe这样:

^{pr2}$

看起来像这样:

   a  b
0  0  1
1  1  2
2  2  3
3  3  4

以及一个X乘以Y的函数:

def XtimesY(x,y):
    return x*y

如果我想在df中添加一个新的熊猫系列,我可以:

df["c"] =df.apply( lambda x:XtimesY(x["a"],2), axis =1)

它起作用了!在

现在我要添加多个系列:

我有这个功能:

def divideAndMultiply(x,y):
    return x/y, x*y

像这样?公司名称:

df["e"], df["f"] = df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1)

不管用!在

我希望'e'列接收除法,'f'列接受乘法!在

注意:这不是我正在使用的代码,但我期待相同的行为。在


Tags: lambda函数importdataframepandasdfreturndef
3条回答
df["e"], df["f"] = zip(*df.apply( lambda x: divideAndMultiply(x["a"],2) , axis =1))

应该会成功的。在

(我展示了这个例子,以便您了解如何使用多个列作为输入来创建多个新列)

快到了。使用zip*解压函数。试试这个:

def divideAndMultiply(x,y):
    return x/y, x*y

df["e"], df["f"] = zip(*df.a.apply(lambda val: divideAndMultiply(val,2)))

更新

Updated for version 0.23 - using result_type='broadcast' for further details refer to documentation

像这样重新定义函数:

def divideAndMultiply(x,y):
    return [x/y, x*y]

然后这样做:

^{pr2}$

你将得到期望的结果:

In [118]: df
Out[118]:
   a  b  e  f
0  0  1  0  0
1  1  2  0  2
2  2  3  1  4
3  3  4  1  6

相关问题 更多 >