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

拆分DataFrame列中嵌套日期列表并计算平均小时数

解决方案

问题分析

你原来的代码只处理了每个单元格第一个空格后的内容,没覆盖逗号分隔的所有时间项,所以无法实现需求。需要针对每个时间项单独提取时分秒,再计算小时平均值。


处理步骤与代码

1. 提取时分秒,重构date_time列

通过拆分每个逗号分隔的时间项,去除日期部分只保留时分秒,再重新拼接:

df['date_time'] = df['date_time'].apply(
    lambda x: ','.join([t.strip().split()[1] for t in x.split(',')])
)
  • x.split(','):将单元格字符串按逗号拆分为独立时间项
  • t.strip():清除时间项前后的空格(兼容逗号后有无空格的情况)
  • split()[1]:拆分日期和时间部分,取后面的时分秒字符串
  • ','.join(...):将提取的时分秒用逗号拼接回原格式

2. 计算平均小时数AVG_hour

提取每个时分秒的小时部分,计算平均值后取整:

df['AVG_hour'] = df['date_time'].apply(
    lambda x: round(
        sum(int(t.split(':')[0]) for t in x.split(',')) / len(x.split(','))
    )
)
  • t.split(':')[0]:提取单个时间的小时数并转为整数
  • sum(...) / len(...):计算该行所有时间的小时平均值
  • round():对平均值四舍五入取整,与预期结果一致

完整可运行代码

import pandas as pd

# 构造示例DataFrame
data = {
    'ID': [1, 2, 3],
    'date_time': [
        '2020-03-13 21:10:56, 2020-06-02 22:18:06, 2020-04-14 22:10:56, 2021-06-02 22:18:06',
        '2010-09-13 21:43:09, 2011-05-04 23:08:15,2012-06-04 23:08:16',
        '2013-06-14 23:29:17, 2014-08-13 23:20:22,2014-08-13 23:20:22'
    ]
}
df = pd.DataFrame(data)

# 处理date_time列
df['date_time'] = df['date_time'].apply(
    lambda x: ','.join([t.strip().split()[1] for t in x.split(',')])
)

# 计算平均小时
df['AVG_hour'] = df['date_time'].apply(
    lambda x: round(sum(int(t.split(':')[0]) for t in x.split(',')) / len(x.split(',')))
)

print(df)

运行结果

IDdate_timeAVG_hour
121:10:56,22:18:06,22:10:56,22:18:0622
221:43:09,23:08:15,23:08:1622
323:29:17,23:20:22,23:20:2223

(注:原示例中ID3的AVG_hour标注为22应为笔误,实际计算平均值为23)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20