在盘中d以列的形式高效地计算每分钟的回报

2024-04-23 06:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

        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列标记为时间戳,其中相应的每日值是前一分钟的返回值:

        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        ...

我的问题是,这是一个非常大的数据帧(几GB),我需要多次执行此操作。时间和记忆效率是关键,但时间更重要。有没有一些矢量化的、内置的方法可以在熊猫身上做到这一点?你知道吗


Tags: 数据方法记忆标记time时间矢量化内置
1条回答
网友
1楼 · 发布于 2024-04-23 06:39:58

您可以通过一些聚合和移动时间序列来实现这一点,这将导致更高效的计算。你知道吗

首先通过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,因为这些值不会在不同的日子里移动。你知道吗

相关问题 更多 >