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

如何在Pandas中匹配日期区间并提取关联Items数据?

问题解决:Pandas DataFrame关联历史数据与消耗数据

问题背景

现有两个Pandas DataFrame:历史数据hist和消耗数据consume,定义如下:

import pandas as pd

hist = pd.DataFrame({'date':['Jan1','Jan2', 'Jan3', 'Jan4'], 'Items':[['A','V'], ['D','C'],['F','X'],['Q','H']]})
consume = pd.DataFrame({'date':['Jan2','Jan4'], 'values':[100, 50]})
consume['delta'] = consume['values'].diff()

consume表初始数据:

datevaluesdelta
Jan2100NaN
Jan450-50

需求

提取Jan2到Jan3(不含Jan4)的所有Items,将其对应到consume表中Jan4行的delta记录,最终得到目标表:

datevaluesdeltaitem_consumed
Jan2100NaNNaN
Jan450-50[D,C,F,X]

解决方案

直接通过两步操作即可实现需求:

# 1. 筛选Jan2到Jan3的Items并合并成一个列表
target_items = hist[(hist['date'] >= 'Jan2') & (hist['date'] < 'Jan4')]['Items'].sum()

# 2. 给consume新增列并赋值
consume['item_consumed'] = pd.NA
consume.loc[consume['date'] == 'Jan4', 'item_consumed'] = [target_items]

# 查看结果
print(consume)

运行后输出结果:

date  values  delta item_consumed
0  Jan2     100    NaN           <NA>
1  Jan4      50  -50.0    [D, C, F, X]

代码说明

  • 利用字符串比较筛选目标日期区间:因为日期是JanX格式,直接用>=和<就能完成区间判断
  • 通过.sum()合并多行列表:把['D','C']和['F','X']直接合并成一个完整列表
  • 先初始化item_consumed列为缺失值,再通过loc精准定位Jan4行赋值,避免其他行被污染

如果你的日期格式更复杂(比如带年份),建议先把date列转为日期类型再筛选:

# 转换日期格式
hist['date'] = pd.to_datetime(hist['date'], format='%b%d')
consume['date'] = pd.to_datetime(consume['date'], format='%b%d')

# 按日期区间筛选
target_items = hist[(hist['date'] >= '2024-01-02') & (hist['date'] <= '2024-01-03')]['Items'].sum()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:55:08