如何在pandas DataFrame中按门店分组创建符合条件的滞后特征
解决方案
分两种场景实现需求:
方案1:生成滞后特征时从根源避免跨门店串值(更推荐)
不需要先做全局shift再修正,直接按store_id分组后做滞后操作,分组下第一条数据的滞后值会自动变为NaN,直接填充0就刚好符合需求:
# 按门店分组后做1步滞后,缺失值填充为0 df1['Data_lagged'] = df1.groupby('store_id')['units_sold'].shift(1).fillna(0)
注意:执行该操作前请确保数据已经按「门店+时间维度」升序排序,否则滞后顺序会出错,排序参考代码:
df1 = df1.sort_values(by=['store_id', '你实际的时间字段名'], ignore_index=True)
方案2:对已生成的全局滞后结果做修正
如果已经提前生成了全局shift的Data_lagged字段,只需要定位到门店切换的行,把对应滞后值置0即可:
# 找到当前行store_id和上一行不一致的记录,将对应Data_lagged设为0 df1.loc[df1['store_id'] != df1['store_id'].shift(1), 'Data_lagged'] = 0
运行后你给出的样例中索引为32的行Data_lagged会自动变为0,其他行的滞后值不受影响,完全符合需求。
内容的提问来源于stack exchange,提问作者HeinrichCode
相关产品推荐
相关产品推荐

