【问题标题】:Getting smallest value of a column in last n rows在最后 n 行中获取列的最小值
【发布时间】:2018-06-28 12:28:12
【问题描述】:

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

【问题讨论】:

  • 请提供您的预期结果以尽量减少混淆。
  • 我猜你需要在df.rolling(5) 上使用apply 你可以检查这个example
  • 在索引 5309 处,前 5 行索引 5305 是最低开口,请参阅下面的解决方案。

标签: python pandas


【解决方案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

【讨论】:

  • 实际上我正在尝试获取最低开盘价的高低列。不是列的最小最大值
  • 在您的示例最后一行中,您将索引 5308 作为 L。我需要的是索引 5308 的高值和低值
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 2021-06-02
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2018-10-30
  • 2014-02-20
相关资源
最近更新 更多