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

基于指定日期范围的可扩展多列日期筛选与结构化输出需求

可扩展的多列日期筛选方案

这问题我熟!要实现这种可扩展的多列日期筛选,最稳妥的方式是先把宽表转成窄表(也就是unpivot操作)——这种方式天然支持后续新增任意多列,核心逻辑完全不用改动。下面用Python的pandas给你提供一个可复用的实现方案:

核心思路

  1. 将多列日期数据(Box 1、Box 2...)转换为「Name-Item-日期」的单行记录格式(宽表转窄表)
  2. 统一解析日期格式,筛选出落在指定范围内的记录
  3. 整理成期望的结构化输出

代码实现

import pandas as pd

# 1. 准备示例输入数据
data = {
    "Name": ["Bill", "Bob", "Jeff", "Sam"],
    "Box 1": ["1-Sep-21", "30-Aug-21", "31-Aug-21", "31-Aug-21"],
    "Box 2": ["3-Sep-21", "3-Sep-21", "4-Sep-21", "29-Aug-21"]
}
df = pd.DataFrame(data)

# 2. 宽表转窄表(unpivot)——这里的关键是支持扩展列
# 用df.columns[1:]自动获取所有非Name列,新增Box3/Box4时无需修改代码
melted_df = df.melt(
    id_vars="Name",
    value_vars=df.columns[1:],
    var_name="Item",
    value_name="Sold Date"
)

# 3. 解析日期并筛选指定范围(2021-09-01至2021-09-07)
melted_df["Sold Date"] = pd.to_datetime(melted_df["Sold Date"], format="%d-%b-%y")
start_date = pd.to_datetime("2021-09-01")
end_date = pd.to_datetime("2021-09-07")

filtered_df = melted_df[
    melted_df["Sold Date"].between(start_date, end_date)
].sort_values(by="Name")

# 4. 转换回原日期格式并输出
filtered_df["Sold Date"] = filtered_df["Sold Date"].dt.strftime("%d-%b-%y")
print(filtered_df.reset_index(drop=True))

运行结果

Name    Item Sold Date
0   Bill  Box 1   01-Sep-21
1   Bill  Box 2   03-Sep-21
2    Bob  Box 2   03-Sep-21
3   Jeff  Box 2   04-Sep-21

扩展性说明

  • 如果后续新增Box 3、Box 4等列,只需要确保输入数据包含这些列,代码中的df.columns[1:]会自动识别所有非Name列,无需修改任何逻辑
  • 日期范围可以通过修改start_date和end_date变量轻松调整,支持任意时间段筛选

内容的提问来源于stack exchange,提问作者Dakota Brunson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:07:44