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

如何对DataFrame中9:30-15:55时间范围的't'列数据排序?

问题与解答

现有如下DataFrame(DF),我需要对其中't'列里时间处于9:30到15:55之间的数据进行排序。是否可以使用类似DF.sort_values(by='t', '16:00 < t > 9:30')的写法来实现?

d           t           v       vw          o       c       h       l       n   Unnamed: 9
0       2022-05-13  09:30:00    4113    396.5365    396.80  396.30  396.80  396.30  41  NaN
1       2022-05-13  09:35:00    11846   396.4575    396.37  396.47  396.50  396.25  48  NaN
2       2022-05-13  09:40:00    3910    396.4668    396.35  396.54  396.54  396.30  21  NaN
3       2022-05-13  09:45:00    5138    396.3902    396.55  396.20  396.69  396.20  25  NaN
4       2022-05-13  09:50:00    9944    396.0286    396.23  395.88  396.23  395.88  49  NaN
...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...
19346   2022-10-12  23:40:00    2530    357.4370    357.43  357.44  357.46  357.42  40  NaN
19347   2022-10-12  23:45:00    5554    357.4700    357.44  357.50  357.51  357.44  82  NaN
19348   2022-10-12  23:50:00    13121   357.6356    357.51  357.60  357.71  357.51  210 NaN
19349   2022-10-12  23:55:00    9906    357.5821    357.56  357.59  357.66  357.52  106 NaN
19350   2022-10-13  00:00:00    461     357.5896    357.60  357.58  357.60  357.58  5   NaN

19351 rows × 10 columns

结论:不能使用你提到的写法

sort_values()方法没有直接接收条件筛选的参数位置,你写的DF.sort_values(by='t', '16:00 < t > 9:30')会触发语法错误——第二个参数应为ascending、kind等关键字参数,而非筛选条件。

正确实现步骤

需要先筛选符合时间条件的数据,再进行排序,以下是几种可行方案:

方案1:布尔索引筛选 + 排序

先确保t列是可比较的时间类型(若当前为字符串,先转换),再用布尔索引筛选后排序:

import pandas as pd

# 若't'列是字符串类型,转换为时间类型
df['t'] = pd.to_datetime(df['t'], format='%H:%M:%S').dt.time

# 筛选9:30到15:55之间的数据,并按't'列排序
filtered_sorted_df = df[
    (df['t'] >= pd.to_datetime('09:30:00').time()) & 
    (df['t'] <= pd.to_datetime('15:55:00').time())
].sort_values(by='t')

方案2:使用query()简化筛选

如果t列是字符串或已转成时间类型,可直接用query()筛选后排序:

filtered_sorted_df = df.query("t >= '09:30:00' and t <= '15:55:00'").sort_values(by='t')

方案3:合并日期时间列(更严谨)

若需避免跨日期的时间干扰,可合并d和t列为完整datetime后操作:

# 合并日期与时间列为datetime类型
df['datetime'] = pd.to_datetime(df['d'] + ' ' + df['t'])

# 筛选指定时间段并按完整时间排序
filtered_sorted_df = df[
    (df['datetime'].dt.time >= pd.to_datetime('09:30:00').time()) & 
    (df['datetime'].dt.time <= pd.to_datetime('15:55:00').time())
].sort_values(by='datetime')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:35:21