我有一个价格数据框:日期, 开盘价, 收盘价, 周, 交易
我想用python表达,对于数据帧中的每一行,如何计算满足以下条件的最高价格:
- 交易是真实的 日期
- 为未来日期(大于当前行日期(
- 周是一样的
- 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