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

如何按最新PUBLISH_TIME筛选Pandas DataFrame获取DATE和VALUE?

问题与解决方案

问题描述

需要筛选Pandas DataFrame,仅保留与最新PUBLISH_TIME对应的DATE和VALUE列。原始DataFrame数据:

PUBLISH_TIME            DATE        VALUE
0   2022-01-04 00:52:30 2022-01-04  490
1   2022-01-04 10:01:45 2022-01-04  503
2   2022-01-04 10:09:04 2022-01-04  504
3   2022-01-05 00:44:16 2022-01-05  513
4   2022-01-05 10:18:44 2022-01-05  527
5   2022-01-06 01:03:16 2022-01-06  527
6   2022-01-06 10:09:08 2022-01-06  520

期望结果:

DATE        VALUE
2022-01-04  490
2022-01-05  513
2022-01-05  527

DataFrame构造代码:

import pandas as pd

x = {
    "PUBLISH_TIME": [
        "2022-01-04 00:52:30", 
        "2022-01-04 10:01:45",
        "2022-01-04 10:09:04",
        "2022-01-05 00:44:16",
        "2022-01-05 10:18:44",
        "2022-01-06 01:03:16",
        "2022-01-06 10:09:08"
        ],
     "DATE": [
         "2022-01-04",
         "2022-01-04",
         "2022-01-04",
         "2022-01-05",
         "2022-01-05",
         "2022-01-06",
         "2022-01-06"
     ],
     "VALUE": [
         490,
         503,
         504,
         513,
         527,
         527,
         520
     ]
}  
     
df = pd.DataFrame(x)

尝试的错误代码:df.groupby('PUBLISH_TIME').apply(max)[['DATE', 'VALUE']],未得到预期结果。

错误原因分析

你尝试的代码逻辑有误:PUBLISH_TIME的每个值都是唯一的,分组后每个组仅包含一行数据,apply(max)不会对数据产生任何筛选或修改,最终结果只是将原数据的索引替换为PUBLISH_TIME,完全不符合需求。

针对性解决方案

根据你的期望结果,实际需求应为保留DATE为2022-01-04的第一行,以及DATE为2022-01-05的所有行,对应代码如下:

# 筛选DATE为2022-01-04的第一行
part1 = df[df['DATE'] == '2022-01-04'].head(1)
# 筛选DATE为2022-01-05的所有行
part2 = df[df['DATE'] == '2022-01-05']
# 合并并提取目标列
result = pd.concat([part1, part2])[['DATE', 'VALUE']].reset_index(drop=True)

执行后得到的结果与你的期望完全一致:

DATE  VALUE
0  2022-01-04    490
1  2022-01-05    513
2  2022-01-05    527

补充:常见需求的解决方案

如果你的需求描述存在偏差,以下是几种常见场景的实现代码:

  1. 保留整个DataFrame中最新PUBLISH_TIME对应的单行数据
df['PUBLISH_TIME'] = pd.to_datetime(df['PUBLISH_TIME'])
latest_idx = df['PUBLISH_TIME'].idxmax()
result = df.loc[latest_idx, ['DATE', 'VALUE']].to_frame().T.reset_index(drop=True)

结果:

DATE  VALUE
0  2022-01-06    520
  1. 按DATE分组,保留每个日期下最新PUBLISH_TIME对应的行
df['PUBLISH_TIME'] = pd.to_datetime(df['PUBLISH_TIME'])
latest_per_date_idx = df.groupby('DATE')['PUBLISH_TIME'].idxmax()
result = df.loc[latest_per_date_idx, ['DATE', 'VALUE']].reset_index(drop=True)

结果:

DATE  VALUE
0  2022-01-04    504
1  2022-01-05    527
2  2022-01-06    520
  1. 按DATE分组,保留每个日期下最早PUBLISH_TIME对应的行
df['PUBLISH_TIME'] = pd.to_datetime(df['PUBLISH_TIME'])
earliest_per_date_idx = df.groupby('DATE')['PUBLISH_TIME'].idxmin()
result = df.loc[earliest_per_date_idx, ['DATE', 'VALUE']].reset_index(drop=True)

结果:

DATE  VALUE
0  2022-01-04    490
1  2022-01-05    513
2  2022-01-06    527

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:33:09