繁体   English   中英

pandas 计算同一列的时间差?

[英]pandas Calculate time difference in same column?

我需要根据每个人的 id ( name ) 和登录时间 ( login_time ) 计算出数据集中经过的时间。 我想查看此 df 中列出的每个人的第一个login_time和最终login_time之间经过的时间:

数据示例:

name   login_time
alex   2020-12-18T10:50:35
alex   2020-12-19T11:50:11
sue    2020-10-15T10:00:35
sue    2020-10-16T09:50:22

不幸的是,实际数据集有超过 800,000 行。 如果它只是示例数据,我会这样做:

df = pd.read_csv('filepathto.csv')

df.apply(lambda x: x[x['name'] == 'alex'].login_time.max()
) - df.apply(lambda x: x[x['name'] == 'alex'].login_time.min()) #repeat for sue

我的问题是,我如何缩放这个或者是否有更好的方法能够获得我正在寻找的结果(从第一次记录到最后一次记录的经过时间)?

编辑:DF 有 27 列,而不仅仅是 2 列。列出的两列正是我对此过程感兴趣的内容。

假设df的索引是name列。 我会使用以下方法:

df.groupby('name').max() - df.groupby('name').min()

因为df中只有 2 列,所以df.groupby('name')组值将是login_time列中的值。

login_time是除name之外的唯一列。

如果df中有超过 2 列,请使用以下代码指定login_time列:

df.groupby('name')['login_time'].max() - df.groupby('name')['login_time'].min()

GroupBy.aggSeries.sub相减使用:

df['login_time'] = pd.to_datetime(df['login_time'])

df1 = df.groupby('name')['login_time'].agg(['min','max'])
print (df1)
                     min                 max
name                                        
alex 2020-12-18 10:50:35 2020-12-19 11:50:11
sue  2020-10-15 10:00:35 2020-10-16 09:50:22

df2 = df1['max'].sub(df1['min']).reset_index(name='diff')
print (df2)
   name            diff
0  alex 1 days 00:59:36
1   sue 0 days 23:49:47

或者如果性能不重要:

df2 = (df.groupby('name')['login_time']
         .agg(lambda x: x.max() - x.min())
         .reset_index(name='diff'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM