python - pandas - 高效计算日内数据的分钟返回

标签 python pandas

我有一个看起来像这样的 DataFrame:

        closingDate                Time   Last
0        1997-09-09 2018-12-13 00:00:00  1000
1        1997-09-09 2018-12-13 00:01:00  1002      
2        1997-09-09 2018-12-13 00:02:00  1001   
3        1997-09-09 2018-12-13 00:03:00  1005

我想创建一个包含大约 1440 列标记为时间戳的 DataFrame,其中相应的每日值是前一分钟的返回:

        closingDate            00:00:00   00:01:00   00:02:00
0        1997-09-09 2018-12-13  -0.08        0.02     -0.001    ...
1        1997-09-10 2018-12-13        ...

我的问题是这是一个非常大的 DataFrame(几 GB),我需要多次执行此操作。时间和内存效率是关键,但时间更重要。是否有一些矢量化的内置方法可以在 pandas 中执行此操作?

最佳答案

您可以通过一些聚合和移动您的时间序列来做到这一点,这应该会导致更有效的计算。

首先按closingDate 聚合您的数据。

g = df.groupby("closingDate")

接下来,您可以将数据偏移一天。

shifted = g.shift(periods=1)

这将创建一个新数据框,其中 Last 值将来自前一分钟。现在您可以根据索引连接到您的原始数据框。

df = df.merge(shifted, left_index=True, right_index=True)

这会将移动后的列添加到新的数据框中,您可以使用它来进行差异计算。

df["Diff"] = (df["Last_x"] - df["Last_y"]) / df["Last_y"]

您现在已拥有所需的所有数据。如果您需要将每一分钟都作为自己的列,则可以对结果进行透视。通过对 closingDate 进行分组,然后应用转换,您可以避免跨天转换日期。如果您查看每天的第一个观察结果,您会得到一个 NaN,因为这些值不会在不同的日子里移动。

关于python - pandas - 高效计算日内数据的分钟返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781507/

相关文章:

python - AWS CDK : Invalid ARN for CloudWatch Logs when using LogGroup. log_group_arn

python - 未为此客户端启用 AWS Cognito 身份验证 USER_PASSWORD_AUTH 流程

python - 将数据导出到 Excel 时出现 Pandas 错误

python - 将缺失的索引(dtype = string)添加到 pandas 中 df 的 value_counts()

python - 层序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2。收到完整形状 : [None, 1]

python - 数字的 PLY 词法分析器始终返回 double

python - Pandas groupby diff 删除列

python - 写锁定文件有时找不到内容(打开 pickled pandas DataFrame 时)- EOFError : Ran out of input

python - pandas - 如何检查日期的连续顺序并复制它们的组?

python - Gmail API ID 无效,但线程 ID 有效