晚上好
我有以下数据框:
print(dd)
dt_op quantity product_code
20/01/18 1 613
21/01/18 8 611
21/01/18 1 613
...
我正尝试获得滞后的Sales,但是以下代码也不也通过product_code计算它们:
dd["Lagged_Sales"] = [dd.loc[dd['dt_op'].between(d - pd.Timedelta(days = 15), d), 'quantity'].sum() \
for d in dd['dt_op']]
我想将dd [“ Lagged_Sales”]定义为过去15天售出的“数量”的总和,用于**每种不同的产品;
最终,对于“ dt_op” 和“ product_code” 中的i。
print(final_dd)
dt_op quantity product_code Lagged Sales
20/01/18 1 613 1
21/01/18 8 611 8
21/01/18 1 613 2
...
谢谢
答案 0 :(得分:1)
IIUC,与pd.Grouper
和“ product_code”分组:
df.dt_op = pd.to_datetime(df.dt_op, errors='coerce')
df.groupby([pd.Grouper(key='dt_op', freq='15D'), 'product_code']).quantity.sum()
dt_op product_code
2018-01-20 611 8
613 2
Name: quantity, dtype: int64
答案 1 :(得分:1)
以rolling
的频率使用15d
:
df.set_index('dt_op').groupby('product_code').rolling('15d').quantity.sum()
product_code dt_op
611 2018-01-21 8.0
613 2018-01-20 1.0
2018-01-21 2.0
Name: quantity, dtype: float64