python - 将数据框列从对象转换为 timedelta 并求和
问题描述
我有一个按月分隔的 Pandas 数据框:
months = [g for n, g in df.groupby(pd.Grouper(key='DATE',freq='M'))]
然后,我每个月都会对名为 的列中的整数求和PARTS RUN
。
parts_run_month_sum = months[month]['PARTS RUN'].sum()
这一切都很好。我需要做的最后一件事是从 column 中添加小时数HOURS RUN (HR:MIN)
。此列是对象数据类型。数据本身是 timedelta 格式,而不是日期时间。格式是这样的:02:11:40
,是小时:分钟:秒。
如果我运行下面的代码行,它会打印与每个月碰巧有的行数相关的正确索引号:
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(run_time)
但是,如果我尝试自己获取时间线,我会收到 a KeyError: 0
,尽管在上面的示例中每个月都会返回一个 0 键。
for run_time in range(len(months[month]['HOURS RUN (HR:MIN)'])):
print(months[month]['HOURS RUN (HR:MIN)'][run_time])
我实际上正在寻找的是如何对时间列求和,但因为它们是我不能这样做的对象。
如何将具有格式的列转换hours:minutes:seconds
为 timedelta 并对时间求和?
解决方案
我认为你需要:
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'])
#if values are times
df['HOURS RUN (HR:MIN)'] = pd.to_timedelta(df['HOURS RUN (HR:MIN)'].astype(str))
我认为您的解决方案可能是聚合的sum
:
df1 = df.groupby(pd.Grouper(key='DATE',freq='M'))['HOURS RUN (HR:MIN)'].sum()
推荐阅读
- c# - Newtonsoft.Json.JsonSerializationException:'反序列化对象时出现意外标记:使用动态对象注释
- node.js - 为实时服务器存储图像和视频的最有效方法是什么?
- c - (C) 将数据分配到堆内存中
- python - google capcha selenium python下载图片
- listview - 如何将行动态添加到 K2 列表视图
- typescript - 使用 TypeORM 以自引用关系获取数据
- angular - ngx 数据表中的 ngFor
- nginx - Nginx 重定向到新位置,包括子文件夹不区分大小写
- php - 在 Laravel 中添加日期和时间以导出 Excel
- r - reactable:按数字指定列