如何用Pandas DataFrame按小时计算时间戳差值与电池电量差值
按小时计算时间戳差值和电池电量差值的解决方案
嘿,作为刚接触Python和Pandas的新手,我来一步步帮你搞定这个问题~ 先明确目标:把给定的DataFrame按小时分组,计算每个小时内的时间跨度(最后一条记录减第一条的时间差)和电池电量变化(最后一条减第一条的电量差),并整理成你想要的格式。
第一步:准备数据并转换时间格式
首先得把timestamp列转换成Pandas能识别的datetime类型,这是进行时间运算的基础。如果你的数据是从文件读取的,记得在pd.read_csv里加上parse_dates=['timestamp'],这里先模拟你的原始数据:
import pandas as pd # 模拟原始数据 data = { 'timestamp': ['2017-10-09 15:33:09', '2017-10-09 15:36:17', '2017-10-09 15:36:27', '2017-10-09 15:38:08', '2017-10-09 15:42:39', '2017-10-09 15:45:30', '2017-10-09 15:48:41', '2017-10-09 15:51:52', '2017-10-09 15:54:53', '2017-10-09 15:57:54', '2017-10-09 16:00:55', '2017-10-09 16:05:47', '2017-10-09 16:08:58', '2017-10-09 16:12:09', '2017-10-09 16:15:20', '2017-10-09 16:18:11'], 'battery_level': [0.37, 0.38, 0.37, 0.38, 0.39, 0.40, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.50] } df = pd.DataFrame(data) # 转换timestamp列为datetime类型 df['timestamp'] = pd.to_datetime(df['timestamp'])
第二步:按小时分组并计算差值
接下来用groupby按小时分组,对每个分组计算时间差和电池差:
# 按小时分组,提取指定格式的小时作为分组键,计算每组的时间跨度和电池变化 result = df.groupby(df['timestamp'].dt.strftime('%H:00:00')).agg( # 时间差:组内最后一条时间 - 第一条时间 timestamp_diff=('timestamp', lambda x: x.max() - x.min()), # 电池差:组内最后一条电量 - 第一条电量 battery_diff=('battery_level', lambda x: x.max() - x.min()) ).reset_index().rename(columns={'timestamp': 'hour'}) # 把时间差转换成HH:MM:SS格式(默认timedelta会带天数,我们只取时分秒部分) result['timestamp_diff'] = result['timestamp_diff'].astype(str).str.split().str[-1] # 调整列顺序,匹配你想要的输出格式 result = result[['hour', 'timestamp_diff', 'battery_diff']]
最终结果
运行代码后,你会得到完全符合预期的结果:
hour timestamp_diff battery_diff 0 15:00:00 00:24:45 0.07 1 16:00:00 00:17:26 0.05
小提示
- 用
dt.strftime('%H:00:00')是为了把时间戳转换成你需要的小时格式作为分组标识; agg函数可以一次性对不同列应用不同计算逻辑,效率很高;- 调整时间差格式是因为Pandas的timedelta类型默认会显示
0 days 00:24:45,我们只截取后面的时分秒部分就好。
内容的提问来源于stack exchange,提问作者Ruben Alves
相关产品推荐
相关产品推荐

