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

2024-03-12

我有一个数据框,其中有一列称为“信号”。我想向该数据框添加一个新列并应用我构建的自定义函数。我对此很陌生,在将我从数据框列中获取的值传递到函数中时,我似乎遇到了麻烦,因此任何有关我的语法错误或推理的帮助将不胜感激!

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(使用前将#替换为@)

将我的自定义函数应用于数据框 python 的相关文章

随机推荐