Pandas按force_min分箱统计各区间总时长的报错解决咨询
问题解决思路与代码实现
报错原因说明
- 第一个
KeyError: 'Column not found: local_dttm':local_dttm是你的DataFrame多级索引的其中一级,不属于普通列,直接通过列名访问自然无法找到。 - 第二个
AssertionError:pandas不支持直接对datetime时间戳类型的列执行sum聚合操作,时间戳求和没有实际业务含义,你需要计算的是时长总和,应该基于时间间隔统计。
另外结合你的业务说明:每10分钟采集一条数据,每条数据对应固定10分钟的停留时长,完全可以通过统计每个分箱的记录条数,直接乘以10分钟得到总时长,不需要操作时间戳求和,逻辑更简单也不会报错。
完整实现代码
import pandas as pd # 定义分箱规则 bins = [0,200,400,600,800,1000,1200] # 按分箱分组统计记录数,observed=False 保留所有分箱区间,无数据的分箱计数为0 grouped = df.groupby(pd.cut(df['force_min'], bins=bins), observed=False).size() # 统计条数乘以10分钟得到总停留时长,整理为要求的输出格式 result = (grouped .map(lambda x: pd.Timedelta(minutes=10 * x)) .reset_index(name='time_spent_force_min') .rename(columns={'force_min': 'bins'}))
输出结果说明
运行上述代码后得到的result就是你要求的格式,分箱列和时长列完全匹配示例输出,没有数据的分箱会自动显示00:00:00。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

