我正試圖找出我如何標記那些價格屬于4個增加價格的行。 我想知道我如何標記那些屬于4個增加價格的行,"is_consecutive "實際上就是標記。
我設法在這些行之間做了區別:
我設法在這些行之間做了區別。
df['diff1'] = df['Close'].diff()
但是我沒有設法找出哪一行是4個增加價格的一部分。
我想到了使用df.rolling().
。示例 df,
在第0-3行,我們需要在["is_consecutive"]列上得到一個'True'的輸出,因為這個連續行的['diff1']是4行的增加。
在第8-11行,我們需要在["is_consecutive"]列上得到一個'False'的輸出,因為這個連續行的['diff1']是零。
Date Price diff1 is_consecutive
0 1/22/20 0 0 True
1 1/23/20 130 130 True
2 1/24/20 144 14 True
3 1/25/20 150 6 True
4 1/27/20 60 -90 False
5 1/28/20 95 35 False
6 1/29/20 100 5 False
7 1/30/20 50 -50 False
8 2/01/20 100 0 假
9 1/02/20 100 0 假
10 1/03/20 100 0 假
11 1/04/20 100 0 假
12 1/05/20 50 -50 False
一般例子 :
如果 價格=[30,55,60,65,25]/p>
不同形式的串列上的連續數字將是 :
diff1 = [0,25,5,5,-40]/p>
因此,當diff1是加號時,它實際上意味著連續的價格是增加的。
我需要標記(在df中)有4個連續上漲的行。
謝謝你的幫助(-:
)uj5u.com熱心網友回復:
嘗試一下。.rolling,視窗大小為4,最小周期為1:
df["is_consecutive"/span>] = (
df["Price"] 。
.rolling(4, min_periods=1)
.apply(lambda x: (x.diff().fillna(0) >=0) .all()
.astype(bool)
)
print(df)
列印:
日期 價格 is_consecutive
0 1/22/20 0 真
1 1/23/20 130 真
2 1/24/20 144 真
3 1/25/20 150 真
4 1/26/20 60 假的
5 1/26/20 95 錯
6 1/26/20 100 錯
7 1/26/20 50 錯
uj5u.com熱心網友回復:
假設資料框架是排序的。一種方法是根據差異的總和來確定在3天的上升趨勢之后的第一次價格上揚(即4天的上升趨勢)。
quant1 = (df['Price'].diff().apply(np.sign) == 1).cumsum()
quant2 = (df['Price'].diff().apply(np.sign) == 1).cumsum().where(~(df['Price'] 。 diff().apply(np.sign) == 1)).fill().fillna(0) .astype(int)
df['is_consecutive'] = (quant1-quant2) >=3
注意,上面只考慮了嚴格增加的價格(不相等)。
然后我們用win_view自定義的函式覆寫前3個價格的is_consecutive標簽,使其也成為TRUE:
def win_view(x, size)。
if isinstance(x, list)。
x = np.array(x)
if isinstance(x, pd.core.series.Series) 。
x = x.value
if isinstance(x, np.ndarray)。
pass pass
else:
raise Exception('wrong type')
return np.lib.stride_tricks.as_strided(
x,
shape=(x.size - size 1, size) 。
strides=(x.strides[0], x.strides[0] )
)
arr = win_view(df['is_consecutive'], 4)
arr[arr[:,3]] = 真。
注意,我們把這些值替換成了True.
。編輯1
df['is_consecutive'] = False
arr = win_view(df['Price'].diff(), 4)
arr_ind = win_view(list(df['Price'].index), 4)
mask = arr_ind[np.all(arr[:, 1:] > 0, axis=1) ].flatten()
df.loc[mask, 'is_consecutive'] = True[/span
我們維護兩個陣列,一個用于回傳,一個用于索引。我們收集有3個連續正回報的指數 np.all(arr[:, 1:] > 0, axis=1(即4個上升的價格),我們將這些指數替換到我們的原始df中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328944.html
標籤:
