首页 > 解决方案 > X 等于 Y WHEN a==b 并且等于 Z WHEN b==c 在 Python 中

问题描述

这是我正在尝试做的事情:

数据框包含 EURUSD D1 的标准金融市场价值。

df = symbol_data("EURUSD","D1")
price = df["close"].iloc[-100:]

op = df['open'].iloc[-100:]
hi = df['high'].iloc[-100:]
lo = df['low'].iloc[-100:]
cl = df['close'].iloc[-100:]

max_idx = list(argrelextrema(hi.values, np.greater, order=10)[0])
min_idx = list(argrelextrema(lo.values, np.less, order=10)[0])
idx = max_idx + min_idx
idx.sort()

peaks = hi.values[max_idx] if max_idx == idx and lo.values[min_idx] if min_idx==idx

我有一个最大值时我希望峰值等于高值,我有一个最小值时,我希望它们等于低值,并且我希望它们也按索引排序。

意义:

high_peaks = hi.values[max_idx]
low_peaks = lo.values[min_idx]

需要对这些峰值进行排序混合:

peaks = high_peaks and low_peaks

例如:

max_idx = [4, 31, 72, 97]
min_idx = [18, 43, 67]

idx = [4, 18, 31, 43, 67, 72, 97]


high_peaks = array([1.10947, 1.14955, 1.10167, 1.13829])
low_peaks = array([1.07772, 1.0635 , 1.07263])

我需要这个:

peaks = array([1.10947, 1.07772, 1.14955, 1.0635, 1.07263, 1.10167, 1.13829])

有谁知道如何做到这一点?

标签: python

解决方案


这个答案将hi.values[max_idx]or lo.values[min_idx](但绝不是混合)或 None放在peaks.

peaks = hi.values[max_idx] if max_idx == idx else lo.values[min_idx] if min_idx == idx else None

等效地:

if max_idx == idx:
  peaks = hi.values[max_idx]
elif min_idx == idx:
  peaks = lo.values[min_idx]
else:
  peaks = None

推荐阅读