python - Pandas 根据其他列的值移动列数据
问题描述
我有一个看起来像这样的数据框:
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 预测下一个 midprice。我想应用 pandas.DataFrame.shift,但这并没有考虑到我每秒都有不同的观察结果。有没有办法取 epochsecond:1570780801 的平均值并将其应用于 epochsecond:1570780800 的所有观测值。我总共有 868471 秒,所以这段代码应该应用于所有观察。
有人知道怎么做这个吗?
解决方案
欢迎来到堆栈溢出。
您可以使用函数计算相同历元秒的所有观测值的平均值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)
这会给你你想要的,但你必须决定如何填写最后一个纪元的条目,这将是空的(因为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
推荐阅读
- formatjs - 如何给 intl-messageformat-parser 起别名?
- django - 如何用标准 django 管理视图中的操作列替换 django-simple-history 视图中的评论列?
- python - 匹配几个可变参数
- javascript - 如何使有效载荷响应返回数据为不同的格式?
- jestjs - 测试 NestJS 验证管道不起作用
- google-app-engine - 连接到 GCP App Engine 上的 SocketIO 服务器时如何使用域而不是公共 IP?
- amazon-web-services - 尝试在 AWS EMR 中获得 GPU 支持时出现错误“一个 NVIDIA 内核模块 'nvidia' 似乎已加载到您的内核中”
- python - Python 正则表达式 A|B|C 匹配 C,即使 B 应该匹配
- python - AWS Lambda 将图像文件发送到 Amazon Sagemaker
- c# - 为什么 `foo is not { } bar` 在语义上不等同于 `!(foo is { } bar)`?