【发布时间】:2023-01-21 04:51:34
【问题描述】:
我有以下数据框:
pair price ts
0 BTCUSDT 4724.89 985446400
1 ETHUSDT 384.79 985446400
2 BTCUSDT 4724.89 985447400
3 ETHUSDT 384.79 985447400
4 BTCUSDT 4724.89 985448400
... ... ... ...
172795 BTCUSDT 4834.91 1071843400
172796 ETHUSDT 388.46 1071844400
172797 BTCUSDT 4834.91 1071844400
172798 ETHUSDT 388.46 1071845400
172799 BTCUSDT 4834.91 1071845400
我想使用 pandas_ta 库对数据框中每一对的值应用一组预定义的指标。
到目前为止,我已经设法获得了这样最快的方法:
seconds[['EMA', 'SMA', 'RSI']] = seconds.groupby("pair", group_keys=False, sort=False)["price"].apply(
lambda x: pd.DataFrame(
{
"EMA": ta.ema(x, length=14),
"SMA": ta.sma(x, length=14),
"RSI": ta.rsi(x, length=14),
}
)
)
但是,我觉得为每一对创建一个新的数据框,尤其是当有两个以上的数据框时,并不是真正的最佳选择。
我也试过像这样返回一个元组:
seconds.groupby("pair", group_keys=False, sort=False)["price"].apply(
lambda x: (
ta.ema(x, length=14),
ta.sma(x, length=14),
ta.rsi(x, length=14),
)
)
但我无法弄清楚如何以有效的方式将该元组的结果附加到我的 df 中。我可以注意到元组的每个元素都包含所有需要附加的列,但不知道如何从这里开始。这似乎比为每对创建一个单独的数据框快 30% 左右。
(0 NaN
2 NaN
4 NaN
6 NaN
8 NaN
...
172791 4834.91
172793 4834.91
172795 4834.91
172797 4834.91
172799 4834.91
Name: EMA_14, Length: 86400, dtype: float64,
0 NaN
2 NaN
4 NaN
6 NaN
8 NaN
...
172791 4834.91
172793 4834.91
172795 4834.91
172797 4834.91
172799 4834.91
Name: SMA_14, Length: 86400, dtype: float64,
0 NaN
2 NaN
4 NaN
6 NaN
8 NaN
...
172791 99.993504
172793 99.993504
172795 99.993504
172797 99.993504
172799 99.993504
Name: RSI_14, Length: 86400, dtype: float64)
预先感谢您的建议!
【问题讨论】: