【问题标题】:resampling python Pandas along n-th row (or integer multiple)沿第 n 行(或整数倍)重新采样 python Pandas
【发布时间】:2019-01-26 16:17:09
【问题描述】:

我希望重新采样一些价格数据流,以便只计算每 n 行的两列的乘积。

例如,在我下面的数据中;我希望(在新列中)计算信号和 PrxDiff 的值,前提是索引是 6 的倍数(或其他整数)。

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

我尝试过的是生成一个“余数”值,然后使用 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

【问题讨论】:

    标签: python-3.x pandas resampling


    【解决方案1】:

    你的逻辑基础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)
    

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 2018-04-22
      • 2017-04-08
      • 2019-01-18
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多