提问人:lara_toff 提问时间:11/17/2023 更新时间:11/17/2023 访问量:28
查找与同一股票代码的上一个日期关联的值 [重复]
Looking up the value associated with the previous date of same ticker [duplicate]
问:
我有一个只有 4 行的可重现示例,但我将其用于 12m 行数据集。
有没有更简单的方法可以实现以下代码的功能?正如你所看到的,有很多步骤。
import pandas as pd
df = pd.DataFrame([['1/1/2023','ABC',0.01],['1/1/2023','XYZ',0.09],['1/7/2023','ABC',0.0],['1/7/2023','XYZ',0.03]],columns=['date','ticker','price'])
df['date'] = pd.to_datetime(df['date'])
dates = pd.DataFrame(df['date'].unique(),columns=['date'])
dates['lastweek'] = dates['date'].shift(1)
tmp = df[['date','ticker']]
tmp = tmp.merge(dates,on='date',how='left')
tmp = tmp.merge(df[['date','ticker','price']],left_on=['lastweek','ticker'],right_on=['date','ticker'])
tmp['price'] = tmp['price'].fillna(0)
tmp = tmp.drop(columns=['date_y'])
tmp = tmp.rename(columns={'date_x':'date','price':'lastweekprice'})
df = df.merge(tmp[['date','ticker','lastweekprice']],on=['date','ticker'],how='left')
答:
-1赞
Panda Kim
11/17/2023
#1
法典
如果您的数据是按周计算的,如示例中所示,并且您希望按股票代码获取前一周的数据,则可以使用 + 。groupby
shift
out = df.assign(lastweekprice=df.groupby('ticker')['price'].shift())
外:
date ticker price lastweekprice
0 1/1/2023 ABC 0.01 NaN
1 1/1/2023 XYZ 0.09 NaN
2 1/7/2023 ABC 0.00 0.01
3 1/7/2023 XYZ 0.03 0.09
此外,通过清楚地解释您想要的输入和期望的输出,获得响应会容易得多,而不必阅读不必要且冗长的代码来清楚地了解您需要做什么并找到改进代码的方法。
上一个:Python 包首次安装
评论