这个标题可能有点令人困惑,但是我会尽力解释我要做什么。我有股票的OHLC CSV。我正在尝试添加一个名为L和H的新列。我需要检查最近n天内最小的开盘价(例如5)。并且我需要将“低价”设置为L,将“高价”设置为H。
这是我的数据框
Date Open High Low
5303 2018-06-11 1681.51 1694.24 1680.59
5304 2018-06-12 1693.00 1699.51 1691.52
5305 2018-06-13 1702.81 1713.75 1700.12
5306 2018-06-14 1713.48 1724.80 1708.87
5307 2018-06-15 1714.00 1720.87 1708.52
5308 2018-06-18 1706.26 1726.74 1702.56
5309 2018-06-19 1709.04 1736.11 1700.39
5310 2018-06-20 1742.50 1762.93 1741.36
5311 2018-06-21 1760.00 1763.10 1717.56
5312 2018-06-22 1742.62 1743.00 1711.90
我尝试过以下方法,但它只会返回最小值,而我无法把握的高和低序列
df['Open'].rolling(5).min()
在这里,我尝试获取rolling()
的索引或整个Dataframe系列,以获取此滚动的Hig和Low值。我希望我能解释。
编辑:添加了预期的输出
比方说,索引5308是最近5行中最小的Open。因此,在其余数据中,L等于5308的Low
列,H等于5308的High
列
Date Open High Low H L
5309 2018-06-19 1709.04 1736.11 1700.39 1726.74 1702.56
5310 2018-06-20 1742.50 1762.93 1741.36 1726.74 1702.56
5311 2018-06-21 1760.00 1763.10 1717.56 1726.74 1702.56
5312 2018-06-22 1742.62 1743.00 1711.90 1726.74 1702.56
答案 0 :(得分:1)
IIUC,在滚动应用中使用idxmin
:
df[['L','H']] = (df.reindex(df['Open'].rolling(5)
.apply(lambda x: x.idxmin(),
raw=False))[['Low','High']].values)
输出:
Date Open High Low L H
5303 2018-06-11 1681.51 1694.24 1680.59 NaN NaN
5304 2018-06-12 1693.00 1699.51 1691.52 NaN NaN
5305 2018-06-13 1702.81 1713.75 1700.12 NaN NaN
5306 2018-06-14 1713.48 1724.80 1708.87 NaN NaN
5307 2018-06-15 1714.00 1720.87 1708.52 1680.59 1694.24
5308 2018-06-18 1706.26 1726.74 1702.56 1691.52 1699.51
5309 2018-06-19 1709.04 1736.11 1700.39 1700.12 1713.75
5310 2018-06-20 1742.50 1762.93 1741.36 1702.56 1726.74
5311 2018-06-21 1760.00 1763.10 1717.56 1702.56 1726.74
5312 2018-06-22 1742.62 1743.00 1711.90 1702.56 1726.74