Pandas ValueError:序列的真值不明确。计算上一个和当前元素之间的最大值时

2024-10-02 02:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用熊猫计算蜡烛的超趋势。在我的数据帧中,有一列名为up,另一列名为dn,如下面代码中所定义的

我需要根据以下条件计算trendUp特性:

  • 如果前一行的close大于当前行的trendUp,则trendUp应等于当前行的up和前一行的trendUp之间的最大值

我当前的实现如下所示:

candles_df['up'] = candles_df['hl2'] - (factor * candles_df['atr'])
candles_df['dn'] = candles_df['hl2'] + (factor * candles_df['atr'])

candles_df['trendUp'] = candles_df['up']
candles_df['trendUp'] = np.where(candles_df['close'].shift(1) > candles_df['trendUp'], max([candles_df['up'], candles_df['trendUp'].shift(1)]) , candles_df['up'])

但是,当我执行此代码时,会出现以下错误:

Traceback (most recent call last):
  File "test_trend.py", line 178, in <module>
    trend('instrument')
  File "test_trend.py", line 153, in trend
    candles_df['trendUp'] = np.where(candles_df['close'].shift(1) > candles_df['trendUp'], max([candles_df['up'], candles_df['trendUp'].shift(1)]) , candles_df['up'])   
  File "/home/aniruddh/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py", line 1469, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

起初,我认为错误对应于np.where条件子句。但是,如果我用一个静态量替换max()函数,代码就会工作

我该怎么做? 多谢各位


Tags: 代码inpydfcloseshiftnpline
1条回答
网友
1楼 · 发布于 2024-10-02 02:32:47

使用^{}而不是max来计算数组元素的元素最大值np.maximum比较两个数组并返回一个包含元素最大值的新数组

import numpy as np

candles_df['trendUp'] = np.where(
    candles_df['close'].shift(1) > candles_df['trendUp'], 
    np.maximum(candles_df['up'], candles_df['trendUp'].shift(1)), 
    candles_df['up'])

相关问题 更多 >

    热门问题