我有一个数据框,其中有一列称为“信号”。我想向该数据框添加一个新列并应用我构建的自定义函数。我对此很陌生,在将我从数据框列中获取的值传递到函数中时,我似乎遇到了麻烦,因此任何有关我的语法错误或推理的帮助将不胜感激!
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:系列的真值不明确。使用 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
是不正确的。该方法需要一个function作为输入。因此,您可以简单地使用df['Signal'].apply(slope_test)
.
But pd.Series.apply
这是一个美化的、低效的循环。您应该利用 Pandas 数据框底层的 NumPy 数组提供的矢量化功能。事实上,这是首先使用 Pandas 的一个很好的理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)