我有一个看起来像这样的数据框:
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秒,因此该代码应应用于所有观察结果。
有人知道该怎么做吗?
答案 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