沿第n行(或整数倍)重新采样python熊猫

时间:2018-08-20 13:57:28

标签: python-3.x pandas resampling

我希望对一些价格数据流进行重新采样,以便仅对每第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

1 个答案:

答案 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)