python - 在条件匹配时使用 np.where 或类似方法创建数据框列

标签 python pandas

当某些条件匹配如下时,我正在尝试使用 np.where 或类似方法创建数据框列:

这个链接pickle file是我正在使用的数据的一部分。这是我到目前为止使用的代码:

data = pd.read_pickle('data_df')

数据:

    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 .

执行此操作的好方法是什么?

最佳答案

如果您对长度有疑问并且可以将数据放入同一个数组,请像这里那样做:...

>>> a = pd.Series(np.arange(10))
>>> b = pd.Series(np.arange(100,111))
>>> df = pd.DataFrame([a,b])
>>> df = df.T
>>> df.loc[4.5]=nan
>>> df.sort_index(inplace=True)
>>> df.interpolate(inplace=True)
>>> df
        0      1
0.0   0.0  100.0
1.0   1.0  101.0
2.0   2.0  102.0
3.0   3.0  103.0
4.0   4.0  104.0
4.5   4.5  104.5
5.0   5.0  105.0
6.0   6.0  106.0
7.0   7.0  107.0
8.0   8.0  108.0
9.0   9.0  109.0
10.0  9.0  110.0
>>> df.loc[4.5,1]=0
>>> np.where(df[0]<df[1],1,np.nan)
array([  1.,   1.,   1.,   1.,   1.,  nan,   1.,   1.,   1.,   1.,   1.,
         1.])
>>> np.where(df[0]>df[1],1,np.nan)
array([ nan,  nan,  nan,  nan,  nan,   1.,  nan,  nan,  nan,  nan,  nan,
        nan])
>>>

否则你需要做一些迭代......

关于python - 在条件匹配时使用 np.where 或类似方法创建数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297060/

相关文章:

python - 如何在 Python 中创建多行注释?

python - 计算数据框列中列表的所有排列

python - Sprox 形式与 Turbogears,使用 Mako,仅显示纯文本

Python:如何在矩阵和数据帧之间映射值?

python - Pandas random_state 究竟做了什么?

python - Pandas 为每个唯一 ID 选择较高的值

python - 从循环中的一周中减去日期时间

python - (Python)试图让 "if not in"工作,它正在搜索一个 frozenset

python - Scipy 2D-FFT 给出奇怪/错误的相位(2D 环模型示例)

python - 立即处理异步响应