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

如何用Pandas按Level列分组自动计算时间差?

按Level分组计算每组时间跨度

用户提供的数据集代码:

import pandas as pd
from datetime import datetime, date

data = {'Time': ["08:35:00", "08:40:00", "08:45:00", "08:55:00", "08:57:00", "08:59:00"],
        'Level': [250, 250, 250, 200, 200, 200]}

df = pd.DataFrame(data)
df['Time'] = pd.to_datetime(df['Time'],format= '%H:%M:%S' ).dt.time

需求:按Level分组,计算每组的时间跨度(最大值减最小值)。尝试直接用groupby.apply计算Time的最大最小差值时失败,因为time类型不支持直接相减。


解决方案1:保留datetime类型(推荐)

不要将Time列转换为time类型,直接保留datetime类型,这样可以直接进行差值计算:

import pandas as pd

data = {'Time': ["08:35:00", "08:40:00", "08:45:00", "08:55:00", "08:57:00", "08:59:00"],
        'Level': [250, 250, 250, 200, 200, 200]}

df = pd.DataFrame(data)
# 保留datetime类型,不转成time
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S')

# 分组计算时间跨度
df2 = df.groupby('Level')['Time'].agg(lambda x: x.max() - x.min())
print(df2)

输出结果:

Level
200   0 days 00:04:00
250   0 days 00:10:00
Name: Time, dtype: timedelta64[ns]

解决方案2:基于已转换的time类型计算

如果必须保留time类型的Time列,可以在分组后用datetime.combine将time对象转换为datetime对象再计算差值:

import pandas as pd
from datetime import datetime, date

data = {'Time': ["08:35:00", "08:40:00", "08:45:00", "08:55:00", "08:57:00", "08:59:00"],
        'Level': [250, 250, 250, 200, 200, 200]}

df = pd.DataFrame(data)
df['Time'] = pd.to_datetime(df['Time'],format= '%H:%M:%S' ).dt.time

# 分组计算,先转换time为datetime再求差值
df2 = df.groupby('Level').apply(
    lambda x: datetime.combine(date.today(), x['Time'].max()) 
             - datetime.combine(date.today(), x['Time'].min())
)
print(df2)

输出结果同样为:

Level
200   0 days 00:04:00
250   0 days 00:10:00
dtype: timedelta64[ns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:15:34