我希望对一些价格数据流进行重新采样,以便仅对每第n行计算两列的乘积。
例如,在下面的数据中;我希望仅在索引为6的倍数(或其他整数)的情况下,才能在新列中计算signal和PrxDiff的值。
ind signal oldnal time price PrxDiff cnt
0 -1 4 2018-08-14 08:00:06 2.6575 7.525870 0
1 -1 3 2018-08-14 08:00:16 2.6575 7.525870 1
2 -2 2 2018-08-14 08:00:26 2.6585 3.761520 2
3 -1 1 2018-08-14 08:00:36 2.6585 3.761520 3
4 -4 1 2018-08-14 08:00:46 2.6585 3.761520 4
5 1 0 2018-08-14 08:00:56 2.6585 3.761520 5
6 -3 3 2018-08-14 08:01:06 2.6595 0.000000 0
7 0 2 2018-08-14 08:01:16 2.6595 0.000000 1
8 -3 3 2018-08-14 08:01:26 2.6595 0.000000 2
我尝试过的是生成一个'remainder'值,然后使用if循环(对于每一行)来检查cnt ==0。
dataT['cnt'] = dataT.index % 6
for row in dataT.index:
if dataT.cnt[row] == 0:
dataT.cnt[row] = dataT.PrxDiff[row] * dataT.signal[row]
else:
dataT.cnt[row] == 0
dataT
但是有两个问题,列cnt变为整数(并且原始值似乎未设置为零),并且计算似乎要花很多时间(出于某些原因)。
ind signal oldnal time price PrxDiff cnt
0 -1 4 2018-08-14 08:00:06 2.6575 7.525870 -7.0
1 -1 3 2018-08-14 08:00:16 2.6575 7.525870 1.0
2 -2 2 2018-08-14 08:00:26 2.6585 3.761520 2.0
3 -1 1 2018-08-14 08:00:36 2.6585 3.761520 3.0
4 -4 1 2018-08-14 08:00:46 2.6585 3.761520 4.0
5 1 0 2018-08-14 08:00:56 2.6585 3.761520 5.0
6 -3 3 2018-08-14 08:01:06 2.6595 0.000000 0.0
7 0 2 2018-08-14 08:01:16 2.6595 0.000000 1.0
8 -3 3 2018-08-14 08:01:26 2.6595 0.000000 2.0
9 -3 2 2018-08-14 08:01:36 2.6595 3.760105 3.0
10 -5 1 2018-08-14 08:01:46 2.6595 3.760105 4.0
11 -2 0 2018-08-14 08:01:56 2.6595 3.760105 5.0
12 -3 1 2018-08-14 08:02:06 2.6595 3.760105 -11.0
答案 0 :(得分:2)
您的逻辑np.where
np.where((df.ind%6)==0,0,df.PrxDiff*df.signal)
Out[268]:
array([ 0. , -7.52587 , -7.52304 , -3.76152 , -15.04608 ,
3.76152 , 0. , 0. , -0. , -11.280315,
-18.800525, -7.52021 , 0. ])
#df['cnt'] = np.where((df.ind%6)==0,0,df.PrxDiff*df.signal)