我有一个数据框,其中包含州名称和12月产品的每日价格(注意:该数据中没有周末/节假日数据)。看起来像这样:
对于每个州,我想计算产品价格3天的变化。我尝试过类似的方法来计算价格变化:
days=3
for k in df["name"].unique():
test_df=df[df["name"]==k]
test_df=test_df.reset_index(drop=True)
test_df["3_chg"]=np.nan
for i in range(0,test_df.shape[0]-days):
test_df["3_chg"].iloc[i]=(test_df.iloc[i]["product_price"]/test_df.iloc[i+days]["product_price"])-1
输出看起来像这样:
我正在使用我的代码获得所需的输出。但是,我想知道是否有更有效的方法来进行相同的计算。我的代码对一小部分数据采样速度很快,但是,如果我对所有50个州使用该数据,则将花费大量时间。
如果有其他选择,请告诉我。谢谢
答案 0 :(得分:1)
使用shift
df['3_change']=(df['product_price']-df.groupby('name')['product_price'].shift(3))/df['product_price']