给出像这样的DataFrame:
>>> df
0 1 2
0 2 3 5
1 3 4 7
和一个返回多个结果的函数,如下所示:
def sumprod(x, y, z):
return x+y+z, x*y*z
我想添加新列,结果将是:
>>> df
0 1 2 sum prod
0 2 3 5 10 30
1 3 4 7 14 84
我已成功使用返回一个结果的函数:
df["sum"] = p.apply(sum, axis=1)
但不是如果它返回多个结果。
答案 0 :(得分:3)
这样做的一种方法是通过解压缩数组的转置将DataFrame的列传递给函数:
>>> df['sum'], df['prod'] = sumprod(*df.values.T)
>>> df
0 1 2 sum prod
0 2 3 5 10 30
1 3 4 7 14 84
sumprod
返回一个列元组,由于Python支持多个赋值,您可以将它们分配给上面的新列标签。
你可以写df['sum'], df['prod'] = sumprod(df[0], df[1], df[2])
来获得相同的结果。这更清楚,如果您需要以特定顺序将列传递给函数,则更为可取。另一方面,如果你有很多列要传递给函数,那就更详细了。