python-3.x - Pandas 数据帧 timedelta 列以格式化人类可读
问题描述
data = df.groupby(['Jahr','Monat', 'Kunde'])['Dauer'].sum().reset_index(name='TD')
返回:
Jahr | Monat | Kunde | TD
2019 | 7 | C1 | 0 days 08:35:00
2019 | 8 | C1 | 10 days 04:05:00
2019 | 8 | C2 | 0 days 03:25:00
2019 | 9 | C1 | 10 days 09:15:00
2019 | 9 | C6 | 0 days 01:45:00
2019 | 9 | C3 | 0 days 02:30:00
2019 | 9 | C5 | 0 days 00:15:00
TD = 时间增量
我希望在数小时内收到信息,而不是几天
我试过这样的东西:
data['TD'] / pd.Timedelta('1 hours')
这将返回10 days 04:05:00
244.083333
(十进制小时),但我需要244.05
(小时和分钟)
我找到了一些关于如何转换它的技巧,但是有没有很好的方法来把它全部放进去data = df.groupby(['Jahr','Monat', 'Kunde'])['Dauer'].sum().reset_index(name='TD')
编辑 2019-10-07,14:55:
Jahr | Monat | Kunde | TD
2019 | 7 | C1 | 0 days 08:35:00
2019 | 8 | C1 | 10 days 04:05:00
2019 | 8 | C2 | 0 days 03:25:00
2019 | 9 | C1 | 10 days 09:15:00
2019 | 9 | C6 | 0 days 01:45:00
2019 | 9 | C3 | 0 days 02:30:00
2019 | 9 | C5 | 0 days 00:15:00
应该成为
Jahr | Monat | Kunde | TD
2019 | 7 | C1 | 08:35:00
2019 | 8 | C1 | 244:05:00
2019 | 8 | C2 | 03:25:00
2019 | 9 | C1 | 249:15:00
2019 | 9 | C6 | 01:45:00
2019 | 9 | C3 | 02:30:00
2019 | 9 | C5 | 00:15:00
解决方案
首先删除分钟和秒 by Series.dt.floor
,转换为字符串并添加零Series.str.zfill
,然后添加分钟,并将 slicinf timedeltas 转换为字符串:
floor_h = (data['TD'].dt.floor('H').div(pd.Timedelta('1 hours'))
.astype(int)
.astype(str)
.str.zfill(2))
data['TD'] = floor_h + ':' + data['TD'].astype(str).str[-15:-10]
print (data)
Jahr Monat Kunde TD
0 2019 7 C1 08:35:00
1 2019 8 C1 244:05:00
2 2019 8 C2 03:25:00
3 2019 9 C1 249:15:00
4 2019 9 C6 01:45:00
5 2019 9 C3 02:30:00
6 2019 9 C5 00:15:00
推荐阅读
- reactjs - 在 digitalocean droplet 中添加域名
- javascript - 我的舰船命令不适用于提及
- java - java中UPDATE语句的并发执行
- arrays - 指针指针导致 C 中的分段错误
- discord - 在 v12 bot 中,此命令不起作用,discord api 错误我该如何解决
- spring-boot - 动态更改 Spring Data 查询字符串
- php - Laravel 7:无法在全新安装时运行开发
- sql - JPA PostreSQL 多对多关系选择并按关系数量排序
- maven - 我对 springboot-web-embed-tomcat 有依赖问题,它在日志中给了我以下错误
- .net - .NET Core 中的 TallComponents