【发布时间】:2016-07-10 22:39:49
【问题描述】:
当某些条件匹配时,我尝试使用 np.where 或类似方法创建数据框列,如下所示:
这个链接的pickle file 是我正在使用的数据的一部分。这是我目前使用的代码:
data = pd.read_pickle('data_df')
data
Open High Low Last Volume
Timestamp
2014-03-04 09:30:00 1783.50 1784.50 1783.50 1784.50 171
2014-03-04 09:31:00 1784.75 1785.75 1784.50 1785.25 28
2014-03-04 09:32:00 1785.00 1786.50 1785.00 1786.50 81
2014-03-04 09:33:00 1786.00 1786.00 1785.25 1785.25 41
2014-03-04 09:34:00 1785.00 1785.25 1784.75 1785.25 11
这些是我需要在 np.where 元素中使用的时间变量:
#Times
daystart = '9:30'
dayend = '16:14:59'
IB_end = '10:29:59'
IB_session = data.between_time(daystart,IB_end, include_start=True, include_end=True)
day_session = data.between_time(daystart,dayend, include_start=True, include_end=True)
这些是这些时间段的最高点和最低点:
IB_high = IB_session['High'].rolling(window=1,freq='D').max()
IB_low = IB_session['Low'].rolling(window=1,freq='D').min()
我需要编写一个 np.where 语句或类似的语句来创建新的列显示:
当data['Last'] > IB_high 或data['Last'] < IB_low 时,我的声明需要确保每天只发生其中一种情况。需要在“IB_High_Break”或“IB_Low_Break”列中使用简单的 1 来标记这种情况。这最终将用作进入交易的信号。
我试过用这个:
data['IB_High_Break'] = np.where(data['Last'] > IB_high,1, np.nan);
data['IB_Low_Break'] = np.where(data['Last'] < IB_low,1,np.nan);
但是得到一个错误ValueError: Series lengths must match to compare。
任何人都可以帮忙并展示一个好的方法吗?
【问题讨论】:
-
如果提供准确答案过于耗时,我们将不胜感激任何其他帮助。谢谢
-
我试图包含原始数据,但它是否让人们不必打开 pickle 文件?我应该使用随机生成的测试数据再次提问吗?