时间戳 - 如何使用 groupby 计算时间差(以秒为单位)

time stamp - how to calculate time difference in seconds with a groupby

我有一个 pandas 数据框,其中 id 和日期作为 2 列 - 日期列一直到秒。

data = {'id':[17,17,17,17,17,18,18,18,18],'date':['2018-01-16','2018-01-26','2018-01-27','2018-02-11',
                                                  '2018-03-14','2018-01-28','2018-02-12','2018-02-25','2018-03-04'],
       }

df1 = pd.DataFrame(data)

我想要一个新专栏 - (tslt) - 'time_since_last_transaction'。每个唯一 user_id 的第一笔交易可以是一个数字,例如 1。该用户的每个后续交易都应测量该用户的第一个时间戳与其当前时间戳之间的差异,以生成以秒为单位的时间差。

我使用了 datetime 和 timedelta 等,但运气不太好。任何帮助将不胜感激。

你可以试试groupby().transform():

df1['date'] = pd.to_datetime(df1['date'])

df1['diff'] = df1['date'].sub(df1.groupby('id').date.transform('min')).dt.total_seconds()

输出:

   id       date       diff
0  17 2018-01-16        0.0
1  17 2018-01-26   864000.0
2  17 2018-01-27   950400.0
3  17 2018-02-11  2246400.0
4  17 2018-03-14  4924800.0
5  18 2018-01-28        0.0
6  18 2018-02-12  1296000.0
7  18 2018-02-25  2419200.0
8  18 2018-03-04  3024000.0