【问题标题】:How to calculate rolling.agg('max') utilising a dataframe column as input to my function如何利用数据框列作为我函数的输入来计算 rolling.agg(\'max\')
【发布时间】:2022-11-18 18:58:49
【问题描述】:

我正在使用 kline 数据框。我正在向我的 df 添加 Swing_High 和 Swing_Low 列。

我发现了一个错误,在低波动期间我的 Close == Swing_Low 价格。这让我在另一个函数中出现了 inf 错误,我在 close / Swing_Low 中有一个函数。

要解决此问题,我需要根据是否为 ​​Close == Swing_Low 来计算最大/最小值。滚动周期默认为 10,但如果上述情况成立,则将滚动周期增加到 15。

下面是我如何计算 Swing_High 和 Swing_Low 直至遇到 Inf 错误。

import pandas as pd

df = pd.read_csv('Data/bybit_BTCUSD_15m.csv')
df["Date"] = df["Date"].astype('datetime64[ns]')

# Calculate the swing high and low for a given length
df['Swing_High'] = df['High'].rolling(10).agg('max')
df['Swing_Low'] = df['Low'].rolling(10).agg('min')

我尝试了下面的函数,但它给了我一个 ValueError: The truth value of a Series is ambiguous

def swing_high(close, high, period1, period2):
    a = high.rolling(period1).agg('max')
    b = high.rolling(period2).agg('max')
    if a != close:
        return a
    else:
        return b

df['Swing_High'] = swing_high(df['Close'], df['High'], 10, 15)

我该如何解决这个问题,或者有更好的方法来实现我想要的结果吗?

【问题讨论】:

    标签: pandas user-defined-functions valueerror


    【解决方案1】:

    您要实现的目标的简单解决方案:

    使用在哪里功能:

    这是使用 pandas where() 函数的基本语法:

    df['col'] = (value_if_false).where(condition, value_if_true)
    
    df['Swing_High_10']=df['High'].rolling(10).agg('max')
    df['Swing_High_15']=df['High'].rolling(15).agg('max')
    
    df['Swing_High']=(df['Swing_High_15']).where(df['Swing_High_10']!=df['Close'], df['Swing_High_15'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 2017-10-20
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多