在数据中查找最大值和最小值并将 True/False 附加到相应的行 - Python
Find maxima and minima within data and append True/False to corresponding row - Python
我想在股市数据中找到摆动高点和摆动低点。我希望能够将每个点附加到一列。例如)有一个 isHigh 和 isLow 列与收盘价列对齐。因此,在接下来的每一天,如果价格不是摆动高点或低点,它就会在 isHigh/isLow 列中显示 return False。如果它是高点或低点,它将 return 正确。
我已经能够在股市数据中找到 maxima/minma 或转折点,但它 return 只是转折点的数量或每个点的数量。
我无法参考价格提取实际点数。
我用过 numpy 和 scipy argrelextrema。
```
import matplotlib
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
#Generate random data.
data_x = df['close']
data_y = df['close']
#Find peaks(max).
peak_indexes = signal.argrelextrema(data_y.to_numpy(), np.greater)
peak_indexes = peak_indexes[0]
#Find valleys(min).
valley_indexes = signal.argrelextrema(data_y.to_numpy(), np.less)
valley_indexes = valley_indexes[0]
**peak_indexes and valley_indexes only returns a numbered list of the points in numerical order.**
---
我试过了。
close = df['Adj Close']
def turningpoints(close):
dx = np.diff(close)
return np.sum(dx[1:] * dx[:-1] < 0)```
这个return是一个数字646,是波峰和波谷的总和
感谢任何帮助,谢谢
利用 rolling
与 window=len(df)
和 min_periods=1
的优势,让您轻松 window 到当前点。然后检查 value 是否是 min()
或 max()
直到那个点。
df["isHigh"] = ( df["close"].rolling(len(df),1).max() == df["close"] )
df["isLow"] = ( df["close"].rolling(len(df),1).min() == df["close"] )
示例:
close isHigh isLow
0 0 True True
1 11 True False
2 2 False False
3 22 True False
4 -55 False True
5 44 True False
6 43 False False
7 44 True False
我想在股市数据中找到摆动高点和摆动低点。我希望能够将每个点附加到一列。例如)有一个 isHigh 和 isLow 列与收盘价列对齐。因此,在接下来的每一天,如果价格不是摆动高点或低点,它就会在 isHigh/isLow 列中显示 return False。如果它是高点或低点,它将 return 正确。
我已经能够在股市数据中找到 maxima/minma 或转折点,但它 return 只是转折点的数量或每个点的数量。
我无法参考价格提取实际点数。
我用过 numpy 和 scipy argrelextrema。
```
import matplotlib
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
#Generate random data.
data_x = df['close']
data_y = df['close']
#Find peaks(max).
peak_indexes = signal.argrelextrema(data_y.to_numpy(), np.greater)
peak_indexes = peak_indexes[0]
#Find valleys(min).
valley_indexes = signal.argrelextrema(data_y.to_numpy(), np.less)
valley_indexes = valley_indexes[0]
**peak_indexes and valley_indexes only returns a numbered list of the points in numerical order.**
---
我试过了。
close = df['Adj Close']
def turningpoints(close):
dx = np.diff(close)
return np.sum(dx[1:] * dx[:-1] < 0)```
这个return是一个数字646,是波峰和波谷的总和
感谢任何帮助,谢谢
利用 rolling
与 window=len(df)
和 min_periods=1
的优势,让您轻松 window 到当前点。然后检查 value 是否是 min()
或 max()
直到那个点。
df["isHigh"] = ( df["close"].rolling(len(df),1).max() == df["close"] )
df["isLow"] = ( df["close"].rolling(len(df),1).min() == df["close"] )
示例:
close isHigh isLow
0 0 True True
1 11 True False
2 2 False False
3 22 True False
4 -55 False True
5 44 True False
6 43 False False
7 44 True False