我是python / pandas的新手..所以请不要判断:)
我有一个带库存数据的DF(即日期,收盘价,......)。 现在我想查看给定的Close值是否会达到目标值(例如,收盘+50€,收盘价50€)。
我编写了一个嵌套循环来检查每个接近的值,并使用当天的以下接近值:
def calc_zv(_df, _distance):
_df['ZV_C'] = 0
_df['ZV_P'] = 0
for i in range(0, len(_df)):
_date = _df.iloc[i].get('Date')
target_put = _df.iloc[i].get('Close') - _distance
target_call = _df.iloc[i].get('Close') + _distance
for x in range(i, len(_df)-1):
a = _df.iloc[x+1].get('Close')
_date2 = _df.iloc[x+1].get('Date')
if(target_call <= a and _date == _date2):
_df.ix[i,'ZV_C'] = 1
break
elif(target_put >= a and _date == _date2):
_df.ix[i,'ZV_P'] = 1
break
elif (_date != _date2):
break
这很好..但我想知道是否有更好的(更快,更像熊猫)解决方案?
谢谢,并祝福。 微米。
你好, 这是一些示例数据生成器:
import numpy as np
import pandas as pd
from PX.indicator_macros import calc_zv
import datetime
abc = datetime.datetime.now()
print(abc)
df2 = pd.DataFrame({'DateTime' : pd.Timestamp('20130102'),
'Close' : pd.Series(np.random.randn(5000))})
#print(df2.to_string())
calc_zv(df2, 2)
#print(df2.to_string())
abc = datetime.datetime.now()
print(abc)
5000行我需要大约。 10秒。 我有3年的库存数据(15分钟间隔)需要几分钟。
欢呼声