熊猫根据另一列的值移动列数据

时间:2020-02-25 23:48:49

标签: python pandas dataframe

我有一个看起来像这样的数据框:

    epochseconds  midPrice  midPrice_1
0     1570780800  2954.625         NaN
1     1570780800  2954.625         NaN
2     1570780800  2954.625         NaN
3     1570780800  2954.625         NaN
4     1570780800  2954.625         NaN
5     1570780800  2954.625         NaN
6     1570780800  2954.875         NaN
7     1570780800  2954.875         NaN

    epochseconds  midPrice  midPrice_1
24    1570780801  2954.875         NaN
25    1570780801  2954.875         NaN
26    1570780801  2954.875         NaN
27    1570780801  2954.875         NaN
28    1570780801  2954.875         NaN
29    1570780801  2954.875         NaN
30    1570780801  2954.875         NaN
31    1570780801  2955.000         NaN

每个纪元都有不同数量的观察值。我想预测下一个中间价为epochsecond + 1。我想应用pandas.DataFrame.shift,但是这没有考虑到我每秒都有不同的观察结果。有没有一种方法可以计算以秒为单位的平均值:1570780801,并将其应用于以秒为单位的所有观测值:1570780800。我总共有868471秒,因此该代码应应用于所有观察结果。

有人知道该怎么做吗?

1 个答案:

答案 0 :(得分:2)

欢迎堆栈溢出。

您可以使用groupby函数,然后使用shift函数计算相同纪元的所有观测值的平均值(移动-1,因为您希望将当前纪元的平均值应用于前一秒)。

然后,在原始数据帧上进行左连接。

df_mean_shifted = df.groupby('epochseconds')['midPrice'].mean().shift(-1).rename('midPrice_1')

df.merge(df_mean_shifted, left_on='epochseconds', right_index=True)

这将为您提供所需的内容,但是您必须决定如何在最后一个星期填充条目,该条目为null(由于shift)。

    epochseconds    midPrice    midPrice_1
0   1570780800      2954.625    2954.890625
1   1570780800      2954.625    2954.890625
2   1570780800      2954.625    2954.890625
3   1570780800      2954.625    2954.890625
4   1570780800      2954.625    2954.890625
5   1570780800      2954.625    2954.890625
6   1570780800      2954.875    2954.890625
7   1570780800      2954.875    2954.890625
24  1570780801      2954.875        
25  1570780801      2954.875        
26  1570780801      2954.875        
27  1570780801      2954.875        
28  1570780801      2954.875        
29  1570780801      2954.875        
30  1570780801      2954.875        
31  1570780801      2955.0