Pandas数据帧:使用其他2列创建一个新列,这是一个自定义函数

时间:2017-12-13 19:22:56

标签: python pandas

考虑存储在pandas DataFrame dfX中的以下数据集:

A   B
1   2
4   6
7   9

我的功能是:

def someThingSpecial(x,y)
  # z = do something special with x,y
  return z

我现在想在df中创建一个带有计算z值的新列

看看其他SO示例,我尝试了几种变体,包括:

dfX['C'] = dfX.apply(lambda x: someThingSpecial(x=x['A'], y=x['B']), axis=1)

返回错误。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

这似乎对我在v0.21上有用。看看 -

df

   A  B
0  1  2
1  4  6
2  7  9

def someThingSpecial(x,y):
     return x + y


df.apply(lambda x: someThingSpecial(x.A, x.B), 1)

0     3
1    10
2    16
dtype: int64

您可能想尝试将您的pandas版本升级到最新的稳定版本(截至目前为0.21)。

这是另一种选择。你可以矢量化你的功能。

v = np.vectorize(someThingSpecial)

v现在接受数组,但分别对每对元素进行操作。请注意,这只是隐藏了循环,正如应用程序那样,但更清洁。现在,您可以计算C -

df['C'] = v(df.A, df.B)

答案 1 :(得分:1)

如果您的函数仅需要一列的值,那么请执行此操作,而不是Coldspeed的答案:

dfX['A'].apply(your_func)

存储:

dfX['C'] = dfX['A'].apply(your_func)