python - 如何在多索引熊猫数据框中将数据滞后 x 个特定天?
问题描述
我有一个包含日期、资产和价格/数量数据的 DataFrame。我试图从 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 数组:
def row_delta(x, df, days, colname):
if datetime.strptime(x['recorddate'], '%Y%m%d') - timedelta(days) in [datetime.strptime(x,'%Y%m%d') for x in df['recorddate'].unique().tolist()]:
return df.loc[(df['recorddate_date'] == df['recorddate_date'] - timedelta(days)) & (df['cusip'] == x['cusip']) ,colname]
else:
return 'nothing'
我也想过做类似的事情来填补缺失的日期,但我的问题是我有多个索引、日期和 cusips,所以我不能只重新索引这个。
解决方案
merge
在DataFrame
右侧框架的日期列中添加 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
date cusip price price_7daysago
0 2017-01-01 a 1.0 NaN
1 2017-01-01 b 2.0 NaN
2 2017-01-02 a 1.2 NaN
3 2017-01-02 b 2.3 NaN
4 2017-01-08 a 1.1 1.0
5 2017-01-08 b 2.2 2.0
推荐阅读
- java - 在 DatePicker 中禁用日期而不启用以前禁用的日期
- react-native - react-native-image-picker 持久存储指向所选图像的链接
- node.js - 使用 nodejs 发送 formData POST 请求
- r - 来自每日数据的每周和每月财务数据
- python - 在 for 循环中合并不同列的 daframe
- javascript - flatlist 的数组过滤器,未定义 filterdFaqs
- ios - 如何偏移地图中心
- reactjs - React 中的会话超时与模态
- ios - ios中的Flutter firebase推送通知
- amazon-web-services - context.succeed(event) 的替代方案