【问题标题】:Retain values with transpose使用转置保留值
【发布时间】:2021-04-01 17:51:53
【问题描述】:

我有一个如下表所示的数据框。

KEY   Week  DEMAND
Item_1  1   6.3
Item_1  2   6.3
Item_1  3   6.3
Item_1  4   6.3
Item_1  5   7.7

我想要的是使用 pandas 数据框转置数据(但具有累积需求)。 我在下面粘贴了结果数据,以便于理解。

结果应如下表所示。

KEY   Week DEMAND   FCST1   FCST2   FCST3   FCST4   FCST5   
Item_1  1   6.3      6.3    6.3     6.3      6.3    6.3 
Item_1  2   6.3     12.5    6.3     6.3      6.3    6.3 
Item_1  3   6.3     18.8   12.5     6.3      6.3    6.3
Item_1  4   6.3     25.0   18.8    12.5      6.3    6.3
Item_1  5   6.7     31.8   25.5    19.3     13.0    6.7

在第 1 周的结果中,每个 fcst 列都是相同的。

第 2 周的 FCST1(fcst1 的滞后 + 第 2 周的需求)是累积的,其他 FCST 具有第 2 周的需求值。

对于第 3 周 fcst1(fcst1 的滞后 + 第 3 周的需求),fcst2(fcst2 的滞后 + 第3 周的需求)是累积的,其他 fcst 与第 3 周的需求具有相同的值。 p>

像这样我有一堆项目,我想对每个项目做同样的操作。

我在 SAS 中做了同样的事情,使用带有 do 循环的数组并保留值。

谁能帮我用python破解这个。

提前致谢。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    你的问题本质上是

    1. KEY 上的自合并
    2. 通过比较两周来获得周滞后
    3. 按cumsum获取需求滞后
    4. 透视数据并填充
        (df.merge(df, on='KEY', suffixes=('_x',''))
           .query('Week_x<=Week')
           .assign(val=lambda x: x.groupby(['KEY','Week_x'])['DEMAND_x'].cumsum())
           .pivot_table(index=['KEY','Week', 'DEMAND'], columns='Week_x', values='val')
           .ffill(axis=1) 
           .add_prefix('FCST')
           .reset_index()
        )
    

    输出:

    Week_x     KEY  Week  DEMAND  FCST1  FCST2  FCST3  FCST4  FCST5
    0       Item_1     1     6.3    6.3    6.3    6.3    6.3    6.3
    1       Item_1     2     6.3   12.6    6.3    6.3    6.3    6.3
    2       Item_1     3     6.3   18.9   12.6    6.3    6.3    6.3
    3       Item_1     4     6.3   25.2   18.9   12.6    6.3    6.3
    4       Item_1     5     7.7   31.5   25.2   18.9   12.6    7.7
    

    【讨论】:

    • 是的,完全按照我想要的方式工作。荣誉.......
    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多