在最后n行中获得一列的最小值

时间:2018-06-28 12:28:13

标签: python pandas

这个标题可能有点令人困惑,但是我会尽力解释我要做什么。我有股票的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

1 个答案:

答案 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