Python pandas-高效地计算日内数据中每分钟作为列的返回值

Python pandas-高效地计算日内数据中每分钟作为列的返回值,python,pandas,Python,Pandas,我有一个数据框,看起来像这样: 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

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

        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),我需要多次执行此操作。时间和记忆效率是关键,但时间更重要。在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
,因为这些值不会在不同的日子内移动。

是的。永远不要循环,使用Pandas和Numpy进行矢量化。目前需要多长时间?我试着用25年的数据计算
df[“Last”].diff()
,并制作
pivot_表
,以获得您所期待的结果。我明白了,因此与此相结合:
pd.pivot_表(df,values='diff',index=['closingDate',columns=df['Time\ux'])
实际上运行速度非常快。总共不到20秒,比直接在df上执行向量操作快得多,谢谢!