熊猫:添加新的列在数据帧基础上在列的值

问题描述:

鉴于这样的数据帧:熊猫:添加新的列在数据帧基础上在列的值

>>> 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

这是关于如何使用你的函数返回多列的一般性问题还是只是为了实现你的结果?例如:'df ['sum'],df ['prod'] = df.sum(axis = 1),df.prod(axis = 1)'给你想要的东西 – EdChum 2014-12-19 10:39:30

+0

这是一个普遍的问题。 – pacholik 2014-12-19 10:58:16

一种方式是通过拆包数组的转置传递数据框的功能列:

>>> 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])以获得相同的结果。如果您需要按特定顺序将列传递给函数,则这更清晰并且更可取。另一方面,如果你有很多列传递给函数,那就更加冗长了。

+0

之后,我发现这只适用于可以处理数组的函数。对于其他情况:'zip(* map(lambda i:func(* i),df.values))' – pacholik 2014-12-22 07:59:00