剩余当前周的最大索引,其中open为max

时间:2017-06-13 08:12:31

标签: python

我有一个价格数据框: 日期,开放,关闭,周,交易

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

  1. 交易是真的
  2. 日期是未来(超过当前行日期)
  3. 周是相同的
  4. MaxH是最大开盘价,或者如果是一周的最后交易日,则MaxH =关闭
  5. 我知道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(Open),因为只有这些行具有相似的周,且交易为真且日期晚于2017.6.13。 2017.6.14的答案是500。 在第3行中,由于它是第W1周的最后一行和交易==真,它将在同一天返回最大值(开盘价,收盘价)。

2 个答案:

答案 0 :(得分:0)

首先,我们需要过滤数据框,以获得我们想要计算最高价格的行

设df为数据帧假设date是一种Datetime

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: give start and end of week data from a given date

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

答案 1 :(得分:0)

这是我的试用版:

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