Python Pandas:Pandas数据框下的一些查找功能
Python代码:Python Pandas:Pandas数据框下的一些查找功能,python,pandas,Python,Pandas,Python代码: import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas_datareader import data as wb stock='3988.HK' df = wb.DataReader(stock,data_source='yahoo',start='2018-07-01') rsi_period = 14 chg = df['Close'].diff(1)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas_datareader import data as wb
stock='3988.HK'
df = wb.DataReader(stock,data_source='yahoo',start='2018-07-01')
rsi_period = 14
chg = df['Close'].diff(1)
gain = chg.mask(chg<0,0)
df['Gain'] = gain
loss = chg.mask(chg>0,0)
df['Loss'] = loss
avg_gain = gain.ewm(com = rsi_period-1,min_periods=rsi_period).mean()
avg_loss = loss.ewm(com = rsi_period-1,min_periods=rsi_period).mean()
df['Avg Gain'] = avg_gain
df['Avg Loss'] = avg_loss
rs = abs(avg_gain/avg_loss)
rsi = 100-(100/(1+rs))
df['RSI'] = rsi
问题:
如果“RSI”低于25,我想找出以下14行的“Close”最大值。
例如
我发现2018-09-12的RSI为21.763243,低于25。
然后,我想找出2018-09-13至2018-10-04(14行)之间的最大接近点。
最终答案应该是3.52。
我可以在Python中执行这个查找函数吗
更新:
subdf = df.iloc[51:51+14]
它能自动变成。
例如
根据公式,我们知道第50行和第51行低于25行。
但是在这个阶段,我需要手动输入50和51。
如果python能为我做到这一点,只需在下面的n中填写50和51即可:
subdf = df.iloc[n:n+14]
最后,结果将是3.52,3.52。首先,您需要添加新索引以获得连续的行号:
df = df.reset_index()
以下是带有RSI的行
df = df.reset_index()
df[df['RSI']<25]
Date High Low Open Close Volume Adj Close Gain Loss Avg Gain Avg Loss RSI
50 2018-09-11 3.40 3.36 3.36 3.36 231749076 3.36 0.0 -0.03 0.006552 -0.020400 24.310377
51 2018-09-12 3.36 3.31 3.35 3.32 377546352 3.32 0.0 -0.04 0.006073 -0.021833 21.763243
subdf = df.iloc[51:51+14]
subdf['Close'].max()
3.52
df.iloc[51:51+14]['Close'].max()