【问题标题】:Lagged Sales for every product每个产品的滞后销售
【发布时间】:2018-08-18 22:01:00
【问题描述】:

晚上好,

我有以下数据框:

print(dd)
dt_op      quantity   product_code
20/01/18      1            613
21/01/18      8            611
21/01/18      1            613 
...

我正在尝试获取滞后的销售额,但以下代码也通过 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。

打印(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
...

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用rolling15d 频率:

    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
    

    【讨论】:

    • 哦,我认为滚动窗口确实更有意义。
    • 问题有点模棱两可,我也喜欢你的回答,我觉得这个问题可以澄清一下
    • 如果我想获得接下来的 15 天怎么办?代替旧代码中的“-”,在(d, d + pd.Timedelta(days = 15)
    • 我对你的意思有点困惑。如果你想总结整个 15 天的时间,这个答案不会那样做(它会做一个滚动的总和,看起来落后 15 天),你想使用coldspeeds
    • 我想要一个能够查看过去(根据问题的要求)和未来(数据集上接下来的“N”天)的函数
    【解决方案2】:

    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
    

    【讨论】:

    • 它引发:插入列的索引与框架索引不兼容
    • @AlessandroCeccarelli 如果问题中的数据框不能准确表示您的实际数据,那么我需要一些东西。
    • 确实如此;可能有与它无关的问题。
    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多