python - Python:如何从列中减去时间戳并创建一个新的 TimeElapsed 列?
问题描述
我有几列dataframe
看起来像这样:
ContextID Time_ms
1 09:12:48.502
1 09:12:48.603
1 09:12:48.934
2 09:15:36.434
2 09:15:36.654
3 09:17:55.940
3 09:17:56.160
3 09:17:57.267
我想做的是TimeElapsed
为每个创建一个名为(最好包含以毫秒为单位的值)的新列ContextID
,它必须包含如下值:
ContextID Time_ms Time_Elapsed
1 09:12:48.502 0
1 09:12:48.603 09:12:48.603 - 09:12:48.502
1 09:12:48.934 09:12:48.934 - 09:12:48:502
2 09:15:36.434 0
2 09:15:36.654 09:15:36.654 - 09:15:36.434
3 09:17:55.940 0
3 09:17:56.160 09:17:55.940 -09:17:55.940
3 09:17:57.267 09:17:57.267 - 09:17:55.940
each的第一个值必须是Time_ms
0secs ContextID
,然后Time_ms
必须从第一个值中减去第二个值,Time_ms
依此类推,差值必须填满Time_Elapsed
列。
我想知道如何在 python 中使用 Pandas 来实现。
谢谢
解决方案
减去groupby
+的结果transform
:
#df['Time_ms'] = pd.to_timedelta(df.Time_ms)
df['Time_Elapsed'] = df.Time_ms - df.groupby('ContextID').Time_ms.transform('first')
ContextID Time_ms Time_Elapsed
0 1 09:12:48.502000 00:00:00
1 1 09:12:48.603000 00:00:00.101000
2 1 09:12:48.934000 00:00:00.432000
3 2 09:15:36.434000 00:00:00
4 2 09:15:36.654000 00:00:00.220000
5 3 09:17:55.940000 00:00:00
6 3 09:17:56.160000 00:00:00.220000
7 3 09:17:57.267000 00:00:01.327000
变换用于将 groupby 结果广播回原始的形状DataFrame
。在这种情况下,我们需要第一个值,因此我们可以执行单次减法:
df.groupby('ContextID').Time_ms.transform('first')
#0 09:12:48.502000
#1 09:12:48.502000
#2 09:12:48.502000
#3 09:15:36.434000
#4 09:15:36.434000
#5 09:17:55.940000
#6 09:17:55.940000
#7 09:17:55.940000
#Name: Time_ms, dtype: timedelta64[ns]
推荐阅读
- alloy-ui - 希望在 Alloy UI 调度程序插件中隐藏从晚上 10 点到早上 6 点的时间
- python - BeautifulSoup 从图表样式中获取价值
- bash - Bash 命令指定要搜索的 egrep
- oracle - 如何从 bash 运行 ODI12c 映射以自动化 ODI 映射过程
- python - 我应该以非 root 用户身份安装 Python 包还是设置一个虚拟环境将它们安装在 Docker 容器中?
- visual-studio-code - VS 代码是否有像我们在 spyder 中一样的变量资源管理器对象?
- node.js - Google Cloud Run 未按预期扩展
- android - 无效的密钥库格式博览会反应原生
- html - 使用css的底部边框圆角
- c - 如何使用从 C 中的另一个文件导入的函数处理文件处理?