基于后1行或前1行复制行

时间:2019-06-28 09:38:33

标签: python pandas

我正在尝试向前和向后复制行。 考虑以下可重现的示例:

df_have = pd.DataFrame([[2017, 50, 'LocA', 'Art1', 10], 
                   [2017, 52, 'LocA', 'Art1', 12], 
                   [2018, 2, 'LocA', 'Art1', 8],
                   [2018, 3, 'LocA', 'Art1', 6],
                   [2018, 8, 'LocA', 'Art1', 5], 
                   [2017, 48, 'LocA', 'Art2', 5], 
                   [2017, 51, 'LocA', 'Art2', 3], 
                   [2018, 1, 'LocA', 'Art2', 5],
                   [2018, 3, 'LocA', 'Art2', 0],
                   [2018, 8, 'LocA', 'Art2', 10]], 
                  columns=['Year', 'Week', 'Location', 'Article', 'Qty'])

如您所见,第一行有Week = 50,第二行有Week = 52。假设我对year & week组合的最小星期有一个固定值,而对于最大值则有一个固定值。对于此示例:minimum_week = 47(年份= 2017)和maximum_week = 9(年份= 2018)。

我想获取最小(47,2017)和最大(9,2018)之间的所有星期数,并复制这些行。应复制的行取决于以下内容。如果之前已经存在一行,则复制该行。如果之前不存在行,则在之后复制行。换句话说:如果可能的话,向后填充,否则向前填充。但是,被复制的行也应该具有正确的星期数。例如,当我们使用week = 50复制第一行时,我们希望week number发生变化。

这应该按组完成,其中一组由LocationArticle的组合组成。

以下是我尝试获取的扩展DataFrame。如果您能向正确的方向暗示我,将不胜感激。

df_want = pd.DataFrame([[2017, 47, 'LocA', 'Art1', 10],
                        [2017, 48, 'LocA', 'Art1', 10],
                        [2017, 49, 'LocA', 'Art1', 10],
                        [2017, 50, 'LocA', 'Art1', 10], 
                        [2017, 51, 'LocA', 'Art1', 10],
                       [2017, 52, 'LocA', 'Art1', 12], 
                       [2017, 1, 'LocA', 'Art1', 12],
                       [2018, 2, 'LocA', 'Art1', 8],
                       [2018, 3, 'LocA', 'Art1', 6],
                       [2018, 4, 'LocA', 'Art1', 6],
                       [2018, 5, 'LocA', 'Art1', 6],
                       [2018, 6, 'LocA', 'Art1', 6],
                       [2018, 7, 'LocA', 'Art1', 6],
                       [2018, 8, 'LocA', 'Art1', 5], 
                       [2018, 9, 'LocA', 'Art1', 5], 
                       [2017, 47, 'LocA', 'Art2', 5],
                        [2017, 48, 'LocA', 'Art2', 5], 
                        [2017, 49, 'LocA', 'Art2', 5],
                        [2017, 50, 'LocA', 'Art2', 5],
                       [2017, 51, 'LocA', 'Art2', 3], 
                       [2017, 52, 'LocA', 'Art2', 3],
                       [2018, 1, 'LocA', 'Art2', 5],
                       [2018, 2, 'LocA', 'Art2', 5],
                       [2018, 3, 'LocA', 'Art2', 0],
                       [2018, 4, 'LocA', 'Art2', 0],
                       [2018, 5, 'LocA', 'Art2', 0],
                       [2018, 6, 'LocA', 'Art2', 0],
                       [2018, 7, 'LocA', 'Art2', 0],
                       [2018, 8, 'LocA', 'Art2', 10],
                       [2018, 9, 'LocA', 'Art2', 10]], 
                  columns=['Year', 'Week', 'Location', 'Article', 'Qty'])

0 个答案:

没有答案