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

如何从Pandas DataFrame中按订单日期获取商品最新采购价?

解决Pandas按日期获取每个商品最后采购价的问题

原始数据

import pandas as pd

data = {
    'order_date': ['2022-01-02' , '2022-05-03' , '2022-02-01' , '2022-09-30'],
    'order_id' : ['001' , '002' , '003' , '004'],
    'item_code': ['12-05', '13-05', '13-05' , '12-05' ], 
    'price': [20, 21, 19,17],
}

df_purchase = pd.DataFrame(data)

需求

按order_date筛选出每个item_code的最新采购记录,包含对应的order_id和price,预期结果如下:

order_date order_id item_code  price
0 2022-05-03      002     13-05     21
1 2022-09-30      004     12-05     17

解决方案

方法1:排序后去重(直观易懂)

先将日期列转换为datetime类型,再按商品编码、日期降序排序,最后保留每个商品的第一条记录:

# 转换日期列为datetime类型
df_purchase['order_date'] = pd.to_datetime(df_purchase['order_date'])

# 排序后去重
result = df_purchase.sort_values(
    by=['item_code', 'order_date'],
    ascending=[True, False]
).drop_duplicates(subset='item_code', keep='first').reset_index(drop=True)

print(result)

方法2:分组取最大索引(高效适合大数据)

通过分组获取每个商品最新日期对应的行索引,直接提取目标行:

# 转换日期列为datetime类型
df_purchase['order_date'] = pd.to_datetime(df_purchase['order_date'])

# 获取每个商品最新日期的行索引
latest_idx = df_purchase.groupby('item_code')['order_date'].idxmax()

# 提取目标行
result = df_purchase.loc[latest_idx].reset_index(drop=True)

print(result)

说明

  • 必须先将order_date转换为datetime类型,否则字符串排序逻辑会不符合日期大小的实际规则。
  • 方法2性能更优,大数据量场景下可以避免全量排序的额外开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:40:51