我有一个数据框,显示每家商店每件商品的销售额,如下所示:
date item storeNbr Sales
2021-06-29 soap 123 100
2021-05-29 hat 129 500
2020-06-29 soap 123 0
2020-05-29 hat 129 10
我试图为去年的销售额创建一个列,该列应采用数据框中已经存在的值,其中日期等于上一年,并且商店编号和商品相同。所以它应该是这样的:
date item storeNbr Sales LY
2021-06-29 soap 123 100 0
2021-05-29 hat 129 500 10
2020-06-29 soap 123 0 Nan
2020-05-29 hat 129 10 Nan
我试过这个:
df['Previous'] =
df.groupby([df['date'].dt.month,df['date'].dt.day,df['StoreNbr']])
['Sales'].shift()
但是我很难得到想要的结果。在此提前感谢您的帮助!
3条答案
按热度按时间guz6ccqo1#
样本数据:
代码:
输出:
一个衬里由@scottboston提供
vaj7vani2#
如果您先对其排序,则可以执行groupby和shift。
输出
raogr8fs3#
您的代码很接近,只有3个小改动:
按上的多个字段分组
item
添加参数sort=False
在里面groupby()
确保保留原始订单(最近一年优先)。使用
shift(-1)
获取“下一个”值而不是shift()
它获取上一个值。结果: