根据现有列中的值创建 Pandas DF 列

时间:2021-07-09 01:43:57

标签: python pandas

我有一个很大的 df 显示项目级别的项目销售。销售发生在一年中的每个星期,并具有相应的日期(并非所有项目都在一年中的每个星期都有销售)。 df 看起来像这样:

date         week_of_year itemNbr   itemDesc  storeNbr   Sales  
2021-06-29   23           1234      shampoo   123        100   
2021-07-06   24           1234      shampoo   123        500   
2021-07-09   25           1234      shampoo   180        0     
2020-07-10   24           1234      shampoo   123        50
2020-01-05   1            1325      bowl      129        10   
2019-01-01   1            1325      bowl      129        100   

我需要一个列,显示一年前同一时间(一年中的一周)在同一商店编号的商品销售情况。所以它应该是这样的:

date         week_of_year itemNbr   itemDesc  storeNbr   Sales  YearAgo
2021-06-29   23           1234      shampoo   123        100    NaN
2021-07-06   24           1234      shampoo   123        500    50
2021-07-09   25           1234      shampoo   180        0      NaN
2020-07-10   24           1234      shampoo   123        50     NaN
2020-01-05   1            1325      bowl      129        10     100
2019-01-01   1            1325      bowl      129        100    NaN

我尝试过类似的方法:

df['LastYear'] = df.groupby([df['week_of_year'],df['date'].dt.year,df['storeNbr'], 
df['itemNbr']],sort=False)['Sales'].shift(-1)

但填充在新列中的前一年值似乎不准确,因为一些没有前一年历史记录的项目正在填充销售值。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

通过修改这行代码,我得到了想要的结果:

df['LastYear'] = 
df.groupby([df['week_of_year'],df['date'].dt.year,df['storeNbr'], 
df['itemNbr']],sort=False)['Sales'].shift(-1)

为此,从 groupby 中删除年份并将 shift 更改为 1 而不是 -1:

df['LastYear'] = 
df.groupby([df['week_of_year'],df['storeNbr'], 
df['itemNbr']],sort=False)['Sales'].shift(1)