gpt4 book ai didi

python - 使用 Pandas Align 时,时间序列数据帧返回错误 - valueError : cannot join with no overlapping index names

转载 作者:行者123 更新时间:2023-12-05 08:03:38 31 4
gpt4 key购买 nike

我的目标:

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

问题:

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

enter image description here

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

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com