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

如何用Pandas按指定时间间隔筛选数据并重构列输出格式

问题

现有包含周度间隔数据的Pandas DataFrame(名称为inndata),数据结构如下(日期列存在合并单元格空值):

日期项目XYZ
12-21-2021aa-10050-50
bb100100200
cc300-50250
12-28-2021aa75-5025
bb-75-50-125
cc50100150
...............
12-20-2022aa20055255
bb-25-50-75
cc-1001000

需要按指定时间间隔(1周、1年)筛选对应行数据,提取Z列生成如下格式的结果:

项目1W1YR
aa-50255
bb200-75
cc2500

以下是尝试但未成功的代码:

inndata['Z'] = pd.DataFrame({
              '1W': df.iloc[0,:]
             ,'1YR': df.iloc[-52,:]
            }).T
解决方案

步骤1:填充日期列空值

原DataFrame的日期列因合并单元格存在空值,需先向前填充,让每个项目行对应正确的日期:

inndata['日期'] = inndata['日期'].ffill()

步骤2:转换日期为datetime类型

将日期字符串转为Pandas可识别的datetime格式,方便后续时间筛选:

inndata['日期'] = pd.to_datetime(inndata['日期'], format='%m-%d-%Y')

步骤3:筛选指定时间点的数据

这里「1W」对应最早的周度数据,「1YR」对应最晚的周度数据(即一年后的最后一组数据),先定位这两个日期:

earliest_date = inndata['日期'].min()
latest_date = inndata['日期'].max()

# 筛选这两个日期的所有行
filtered_data = inndata[inndata['日期'].isin([earliest_date, latest_date])]

步骤4:重塑为目标格式

使用pivot方法将数据转换为项目作为行、时间间隔作为列的结构,并重命名列名:

result = filtered_data.pivot(index='项目', columns='日期', values='Z')
result.columns = ['1W', '1YR']  # 按早到晚的顺序对应1W和1YR

执行后result即为目标格式的DataFrame,输出后与需求表格一致。

原代码问题说明

  • 错误使用了未定义的df变量(应为inndata)
  • iloc[0,:]和iloc[-52,:]仅提取单行数据,无法覆盖所有项目的对应时间点数据
  • 赋值逻辑错误,直接修改inndata['Z']会破坏原数据结构,且无法生成目标的多列格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:35:24