创建一个python函数store_id & date作为输入,输出为前一天的销售额

e0bqpujr  于 2023-02-20  发布在  Python
关注(0)|答案(1)|浏览(96)

我有这个store_df数据框:

store_id    date    sales
0   1   2023-1-2    11
1   2   2023-1-3    22
2   3   2023-1-4    33
3   1   2023-1-5    44
4   2   2023-1-6    55
5   3   2023-1-7    66
6   1   2023-1-8    77
7   2   2023-1-9    88
8   3   2023-1-10   99

我无法在面试中解决这个问题。
这正是我问的问题:
1.创建一个包含3列的数据集- store_id、date、sales创建3个Store_id每个store_id包含3个连续日期9行记录销售额我们考虑所有商店的9个相同日期销售额可以是任意随机数
1.编写一个函数,当我们给予store_id & date作为输入时,该函数获取前一天的销售额作为输出

sirbozc5

sirbozc51#

这个问题可以用多种方法来处理。
如果只想获取每组的前一行,假设值是连续的,并按日期递增排序,则使用groupby.shift

store_df['prev_day_sales'] = store_df.groupby('store_id')['sales'].shift()

输出:

store_id       date  sales  prev_day_sales
0         1 2023-01-02     11             NaN
1         2 2023-01-02     22             NaN
2         3 2023-01-02     33             NaN
3         1 2023-01-03     44            11.0
4         2 2023-01-03     55            22.0
5         3 2023-01-03     66            33.0
6         1 2023-01-04     77            44.0
7         2 2023-01-05     88            55.0
8         3 2023-01-04     99            66.0

如果您确实想获取前一天的值(而不是前一天的值),请使用merge

store_df['date'] = pd.to_datetime(store_df['date'])

store_df.merge(store_df.assign(date=lambda d: d['date'].add(pd.Timedelta('1D'))),
               on=['store_id', 'date'], suffixes=(None, '_prev_day'), how='left'
              )
  • 注意:这样可以轻松处理其他增量,如工作日(将pd.Timedelta('1D')替换为pd.offsets.BusinessDay(1))。*

示例(具有不同的输入):

store_id       date  sales  sales_prev_day
0         1 2023-01-02     11             NaN
1         2 2023-01-02     22             NaN
2         3 2023-01-02     33             NaN
3         1 2023-01-03     44            11.0
4         2 2023-01-03     55            22.0
5         3 2023-01-03     66            33.0
6         1 2023-01-04     77            44.0
7         2 2023-01-05     88             NaN # there is no data for 2023-01-04
8         3 2023-01-04     99            66.0

相关问题