当前剩余周的最大指数,其中开盘价为最大值



我有一个价格数据框:日期, 开盘价, 收盘价, 周, 交易

我想用python表达,对于数据帧中的每一行,如何计算满足以下条件的最高价格:

  1. 交易是真实的
  2. 日期
  3. 为未来日期(大于当前行日期(
  4. 周是一样的
  5. MaxH 最大开盘价,或者如果一周的最后一个交易日,MaxH=收盘价

我知道for循环可能会得到答案,但我正在寻找一个更pythonic的表达式。

例如

Row, Date,       Open,    Close,   Week, Trading,MaxHDate      MaxH
0    2017.6.12   120        1      W1    True    2017.6.14     500
1    2017.6.13   100        2      W1    True    2017.6.14     500
2    2017.6.14   500        3      W1    True    2017.6.14     500
3    2017.6.15   300      350      W1    True    2017.6.15     350
4    2017.6.16   1000       4      W1    False
5    2017.7.1    2000       5      W2    True    2017.7.1      5

在第 1 行中,第 2..3 行需要 max(开盘(,因为只有这些行具有相似的周和交易为真且日期晚于 2017.6.13。 答案是 500 在 2017.6.14.在第 3 行中,由于它是 W1 周的最后一行,并且 Trading==True,它将在同一天返回 max(开盘价,收盘价(。

首先,我们需要过滤数据帧,以包含要计算最高价格的行

让 df 为数据帧,假设日期是一种日期时间

df[df.Trading == True && df.date > datetime.datetime.now().date()]

确定此筛选器 1 和 2

你说的周是什么意思,你可以使用类似 Groupby 的东西

df.groupby('Week').count()

您可以通过执行以下操作来过滤 4(我很困惑您要做什么(

df[df.Open == df.Open.max() & df.Close == df.Close.max()]

并参考此链接以获取一周的最后一天,您可以将所有内容与&

Python:给出给定日期的一周开始和结束数据

这个问题太开放了,需要更具体

这是我

的试用版:

a = pd.DataFrame(data={
    'open': [120, 100, 500, 300, 1000, 2000], 'close': [1, 2, 3, 350, 4, 5],
    'Week': ['W1', 'W1', 'W1', 'W1', 'W1', 'W2'], 'Trading': [True, True, True, True, False, True]},
index=[pd.to_datetime('2017-6-12'), pd.to_datetime('2017-6-13'), pd.to_datetime('2017-6-14'),pd.to_datetime('2017-6-15'), pd.to_datetime('2017-6-16'), pd.to_datetime('2017-7-1')])
for d in a.index:
    f = a[(a.index >= d) & (a.Week == a.loc[d].Week) & a.Trading]
    if len(f)>0:
        m = f.open.argmax()
        a.loc[d,'MaxHDate'] = m
        a.loc[d,'MaxH'] = f.loc[m].open if len(f)>1 else f.loc[d].close

最新更新