如何在一个多索引pandas数据帧上延迟x天的数据?

2024-04-25 08:20:57 发布

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

我有一个包含日期、资产和价格/数量数据的数据框。我试图从7天前提取数据,但问题是我不能使用shift(),因为我的表中缺少日期。在

 date   cusip   price   price_7daysago
1/1/2017    a   1   
1/1/2017    b   2   
1/2/2017    a   1.2 
1/2/2017    b   2.3 
1/8/2017    a   1.1         1
1/8/2017    b   2.2         2

我尝试创建一个lambda函数来尝试使用loc和timedelta来创建这种移位,但是我只能输出空的numpy数组:

^{pr2}$

我还想做一些类似于this的操作来填充缺失的日期,但是我的问题是我有多个索引,日期和CUSIP,所以我不能只是重新索引。在

我真的不知道我还能做什么,但任何帮助都将不胜感激!在


Tags: 数据lambda函数numpy数量dateshift价格
2条回答

mergeDataFrame与自身一起添加,同时将7天添加到右侧框架的日期列中。使用suffixes参数适当地命名列。在

import pandas as pd

df['date'] = pd.to_datetime(df.date)
df.merge(df.assign(date = df.date+pd.Timedelta(days=7)), 
         on=['date', 'cusip'],
         how='left', suffixes=['', '_7daysago'])

输出:df

^{pr2}$

您可以将date和{}设置为索引,并将unstack和{}一起使用

shifted = df.set_index(["date", "cusip"]).unstack().shift(7).stack()

然后简单地将shifted与原始的df合并

相关问题 更多 >