python - 如何计算 python pandas 数据帧的第一条记录和最后一条记录之间的时间差

标签 python pandas

我有一个如下所示的数据框。

ATM ID  Ref no  Timestamp

1       11      2020/02/01 15:10:23
1       11      2020/02/01 15:11:03
1       111     2020/02/06 17:45:41
1       111     2020/02/06 18:11:03
2       22      2020/02/07 15:11:03
2       22      2020/02/07 15:25:01
2       22      2020/02/07 15:38:51
2       222     2020/02/07 15:11:03

我希望将其按 ATM ID 和引用号分组,以仅返回引用号和 ATM ID 组合的 1 个结果以及第一个和最后一个引用号的时间戳之间的持续时间。

输出格式

ATM ID  Ref no  Timestamp            Diff
1       11      2020/02/01 15:11:03  00:00:40
1       111     2020/02/06 18:11:03  00:25:22
2       22      2020/02/07 15:38:51  00:27:48
2       222     2020/02/07 15:11:03  00:00:00

最佳答案

GroupBy.agg 中使用自定义 lambda 函数最后一个值与第一个值的差异:

df1 = (df.groupby(['ATM ID','Ref no'])['Timestamp']
         .agg(lambda x: x.iat[-1] - x.iat[0])
         .reset_index(name='diff'))
print (df1)
   ATM ID  Ref no     diff
0       1      11 00:00:40
1       1     111 00:25:22
2       2      22 00:27:48
3       2     222 00:00:00

或者聚合lastfirst并通过DataFrame.assign创建新列:

df1 = (df.groupby(['ATM ID','Ref no'])['Timestamp']
         .agg(['last','first'])
         .assign(diff = lambda x: x.pop('last') - x.pop('first'))
         .reset_index()
         )
print (df1)
   ATM ID  Ref no     diff
0       1      11 00:00:40
1       1     111 00:25:22
2       2      22 00:27:48
3       2     222 00:00:00

关于python - 如何计算 python pandas 数据帧的第一条记录和最后一条记录之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60146201/

相关文章:

python - “NoneType”对象没有属性 'insert' Python 列表 append 插入

python - 为什么我没有从使用编码数据库中得到 SQL 查询的结果?

python - 如何计算 pandas 数据框中一系列单元格中 2 个值以内的单元格?

python - pandas 过滤不包含任何内容的日期时间列

python - 在 Python 中合并两个表

python - 如何将 VectorAssembler 输出的特征映射回 Spark ML 中的列名?

python - Django - 如何从模型中获取所有字段

python - 在 3D numpy 对象中查找与给定 z 值相对应的 x 和 y 值

python - reshape DataFrame - 将具有重复项的列值转换为列标题

python - 使用 Python 的 pandas 从 TXT 文件中解析 DD MM YY HH MM SS 列