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上执行向量操作快得多,谢谢!