我有一個 5 分鐘的時間序列資料框,其標題Open和Pivot. 列Pivot值全天相同。我需要提取前三個 5 分鐘的Open資料,并將每個值與pivot列上的值進行比較,看看它是否更大。如果它更大,那么標題為“結果”的第三列將列印1一整天的長度,0否則。
資料框如下所示:

例如,2022 年 9 月 26 日當天的前 3 個值是18803.900391, 18801.226562 and 18807.296875。由于其中兩個值小于18806.938151相應日期的資料透視列上的值,因此結果列將全天列印 0。
一個粗略的想法:
我松散地想到了這樣的事情,但我知道這是完全錯誤的:
for i in range(len(df)):
df['result'] = df['Open'].iloc[i:i 3] > df['pivot'].iloc[i]
i=i 288 #number of 5 min candles in a day to skip to next one
我無法找到一種方法來遍歷它。任何想法或建議都會有所幫助!先感謝您!
這是我獲取資料框的完整代碼:
import yfinance as yf
import numpy as np
import pandas as pd
import datetime
df = yf.download(tickers='BTC-USD', period = '30d', interval = '5m')
df = df.reset_index()
#resetting df to start at midnight of next day
min_date = df.Datetime.min()
NextDay_Date = (min_date datetime.timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0)
df = df[df.Datetime >= NextDay_Date].copy()
df = df.set_index('Datetime')
# resampled daily pivots merged to smaller timeframe
day_df = (df.resample('D')
.agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}))
day_df['pivot'] = (df['High'] df['Low'] df['Close'])/3
day_df = day_df.reset_index()
day_df['Datetime'] = day_df['Datetime'].dt.strftime('%Y-%m-%d %H:%M:%S')
day_df['Datetime'] = pd.to_datetime(day_df['Datetime'])
day_df = day_df.set_index('Datetime')
day_df.drop(['Open', 'High', 'Low', 'Close'], axis=1, inplace=True)
#merging both dataframes
df = df.join(day_df)
df['pivot'].fillna(method='ffill', inplace=True)
df.drop(['High','Low','Close','Adj Close', 'Volume'], axis=1, inplace=True)
df
uj5u.com熱心網友回復:
這是一個基本的解決方案:
df_s = df.reset_index()
df_s['result'] = 0
start_day = -1
for i in range(len(df_s)):
if df_s['Datetime'][i].day != start_day :
start_day = df_s['Datetime'][i].day
res = np.all(df_s['Open'][i:i 3] > df_s['pivot'][i])
df_s['result'][i] = res
由于我不喜歡多索引資料框,所以我的第一步是將其視為一個 int 索引 df ,其中Datetime只是另一列。現在,我們跟蹤兩件事 -start_day并result迭代如下:
- 對于每個新
start_day的檢查前三個Open值是否大于相應的pivot值,并存盤到result. 即,僅當行條目具有不同的Datetime值時,更新start_day和result值 - 那么
result值必須應用于每一行
現在,我將其稱為基本解決方案的一些不太明顯的原因:
- 如果某個只有 2 個條目,我的代碼在比較和值
start_date之前不會檢查日期(3 個條目的)Openpivot - 該代碼假定df按日期排序并且只考慮日期而不考慮月份,因此如果資料集實際上缺少某些月份的條目,它可能會遇到與上述相同的問題
- 發出
SettingwithCopy警告pandas
但我希望這足以回答 OP 的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519499.html
