gpt4 book ai didi

python - 将我的自定义函数应用于数据框 python

转载 作者:行者123 更新时间:2023-11-28 20:33:02 25 4
gpt4 key购买 nike

我有一个数据框,其中有一列名为 Signal。我想向该数据框添加一个新列并应用我构建的自定义函数。我在这方面很陌生,在将我从数据框列中获取的值传递给函数时,我似乎遇到了麻烦,因此非常感谢对我的语法错误或推理的任何帮助!

Signal
3.98
3.78
-6.67
-17.6
-18.05
-14.48
-12.25
-13.9
-16.89
-13.3
-13.19
-18.63
-26.36
-26.23
-22.94
-23.23
-15.7

这是我的简单功能

def slope_test(x):
if x >0 and x<20:
return 'Long'
elif x<0 and x>-20:
return 'Short'
else:
return 'Flat'

我一直收到这个错误:ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

这是我试过的代码:

data['Position'] = data.apply(slope_test(data['Signal']))

还有:

data['Position'] = data['Signal'].apply(slope_test(data['Signal']))

最佳答案

您可以使用 numpy.select 作为矢量化解决方案:

import numpy as np

conditions = [df['Signal'].between(0, 20, inclusive=False),
df['Signal'].between(-20, 0, inclusive=False)]

values = ['Long', 'Short']

df['Cat'] = np.select(conditions, values, 'Flat')

解释

您正在尝试对一个系列执行操作,就好像它是一个标量一样。由于您的错误中解释的原因,这将不起作用。此外,您的 pd.Series.apply 逻辑不正确。此方法将函数 作为输入。因此,您可以简单地使用 df['Signal'].apply(slope_test)

但是 pd.Series.apply 是一个美化的低效循环。您应该利用 Pandas 数据框底层的 NumPy 数组提供的矢量化功能。事实上,这是首先使用 Pandas 的一个很好的理由。

关于python - 将我的自定义函数应用于数据框 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com