python - 使用 Pandas Align 时,时间序列数据帧返回错误 - valueErro

我的目标:

我有两个时间序列数据帧,一个时间间隔为1m,另一个时间间隔为5m。 5m 数据帧是 1m 数据的重采样版本。我正在做的是使用 vectorbt 库计算一组对应于 5m df 的 RSI 值,然后使用 df.align 将这些值对齐并广播到 1m df。

问题:

尝试逐行执行此操作时,效果非常好。最终结果如下所示:

但是,在函数下应用它时,它返回以下错误,同时具有重叠的索引名称:

ValueError: cannot join with no overlapping index names

完整代码如下:

import vectorbt as vbt
import numpy as np
import pandas as pd
import datetime

end_date = datetime.datetime.now()
start_date = end_date - datetime.timedelta(days=3)

btc_price = vbt.YFData.download('BTC-USD',
                                interval='1m',
                                start=start_date,
                                end=end_date,
                                missing_index='drop').get('Close')


def custom_indicator(close, rsi_window=14, ma_window=50):
    close_5m = close.resample('5T').last()
    rsi = vbt.RSI.run(close_5m, window=rsi_window).rsi
    rsi, _ = rsi.align(close, broadcast_axis=0, method='ffill')
    print(rsi) #to check
    print(close) #to check
    return

#setting up indicator factory
ind = vbt.IndicatorFactory(
    class_name='Combination',
    short_name='comb',
    input_names=['close'],
    param_names=['rsi_window', 'ma_window'],
    output_names=['value']).from_apply_func(custom_indicator,
                                            rsi_window=14,
                                             ma_window=50,
                                            keep_pd=True)
    
res = ind.run(btc_price, rsi_window=21, ma_window=50)


print(res)

感谢您花时间阅读本文。任何帮助将不胜感激!

最佳答案

如果你检查了 , rsi 和 close 的列

print('close is', close.columns)
print('rsi is', rsi.columns)

你会发现

rsi is MultiIndex([(14, 'Close')],
           names=['rsi_window', None])
close is Index(['Close'], dtype='object')

因为它有两个索引,所以应该删除一个,所以可以通过下面的代码来完成

rsi.columns = rsi.columns.droplevel()

删除一级索引,以便对齐,

关于python - 使用 Pandas Align 时,时间序列数据帧返回错误 - valueError : cannot join with no overlapping index names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71895587/

相关文章:

java - 使用 'fib(N) = [Phi^N – phi^N]/Sqrt[5]' 公式计算

html - 如何用 CSS 连接大写单词?

python - 以两种方式遍历列表但无法理解行为

node.js - 在 Github 操作中获取错误 : connect ECONNREFUSED

html - Flexbox 内容显示不正确

xamarin - MAUI Shell 从侧面移除 OverScroll

javascript - 在 Promise.all 中 react setState

javascript - OpenSea 错误 - 请使用 providerUtils.standa

c# - 触发 SelectedIndexChanged 后列表框在视觉上卡住

flutter - 禁用时如何更改下拉默认文本颜色?