我正在尝试向前和向后复制行。 考虑以下可重现的示例:
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
发生变化。
这应该按组完成,其中一组由Location
和Article
的组合组成。
以下是我尝试获取的扩展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'])