我有一个价格数据框: 日期,开放,关闭,周,交易
我想在python中表达,对于数据框中的每一行,如何计算满足以下条件的最高价格:
我知道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周的最后一行和交易==真,它将在同一天返回最大值(开盘价,收盘价)。
答案 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