考虑存储在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)
返回错误。这样做的正确方法是什么?
答案 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)