You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Python函数:依据store_id和date获取前一日销售额

解决面试中的两个Pandas数据处理任务

1. 构建符合要求的数据集

按照面试要求,我们需要生成包含3个门店、每个门店对应3个连续日期、共9条记录,且所有门店覆盖相同9个连续日期的数据集。以下是实现代码:

import pandas as pd
import numpy as np

# 生成9个连续日期(2023-01-01至2023-01-09)
dates = pd.date_range(start='2023-01-01', periods=9)

# 为每个门店分配连续3天的日期
store_ids = []
store_dates = []
for store_num in [1, 2, 3]:
    # 每个门店取3个连续日期,起始位置按门店编号偏移
    start_pos = (store_num - 1) * 3
    store_dates.extend(dates[start_pos:start_pos+3])
    store_ids.extend([store_num] * 3)

# 生成10-99之间的随机销售额
sales = np.random.randint(10, 100, size=9)

# 构建DataFrame
store_df = pd.DataFrame({
    'store_id': store_ids,
    'date': store_dates,
    'sales': sales
})

# 可选:将日期转为字符串格式(与示例格式一致)
store_df['date'] = store_df['date'].dt.strftime('%Y-%m-%d')

生成的数据集示例:

store_id        date  sales
0         1  2023-01-01     45
1         1  2023-01-02     72
2         1  2023-01-03     19
3         2  2023-01-04     88
4         2  2023-01-05     33
5         2  2023-01-06     51
6         3  2023-01-07     67
7         3  2023-01-08     22
8         3  2023-01-09     94

2. 实现查询前一日销售额的函数

以下提供两种实用的实现方式:

方式一:预处理后查询(效率更高)

先提前计算每个门店每条记录的前一日销售额,再通过函数快速查询:

# 先将日期列转为datetime类型,方便日期操作
store_df['date'] = pd.to_datetime(store_df['date'])

# 按门店分组,对每组销售额做位移,得到前一日销售额
store_df['prev_day_sales'] = store_df.groupby('store_id')['sales'].shift(1)

def get_prev_day_sales(store_id, target_date):
    # 转换输入日期为datetime格式
    target_date = pd.to_datetime(target_date)
    # 筛选对应门店和目标日期的记录
    match = store_df[(store_df['store_id'] == store_id) & (store_df['date'] == target_date)]
    # 返回结果,无匹配则返回None
    return match['prev_day_sales'].iloc[0] if not match.empty else None

测试示例:

# 查询门店1在2023-01-02的前一日销售额
print(get_prev_day_sales(1, '2023-01-02'))  # 输出:45
# 查询门店2在2023-01-04的前一日销售额(无记录)
print(get_prev_day_sales(2, '2023-01-04'))  # 输出:None

方式二:函数内动态计算(逻辑更直观)

无需预处理,直接在函数中计算目标日期的前一天,并查询对应门店的销售额:

def get_prev_day_sales(store_id, target_date):
    target_date = pd.to_datetime(target_date)
    # 获取该门店的所有记录并按日期排序
    store_records = store_df[store_df['store_id'] == store_id].sort_values('date')
    # 计算目标日期的前一天
    prev_date = target_date - pd.Timedelta(days=1)
    # 查询前一天的销售额
    prev_sales = store_records[store_records['date'] == prev_date]['sales']
    return prev_sales.iloc[0] if not prev_sales.empty else None

内容的提问来源于stack exchange,提问作者Aravinth Meganathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:17