簡體   English   中英

每個用戶第一次登錄后經過的時間

[英]Time elapsed since first log for each user

我正在嘗試計算用戶的所有日志與同一用戶的第一個日志之間的時間差。 有些用戶有多個日志。

dataframe 看起來像這樣:

16  00000021601     2022-08-23 17:12:04
20  00000021601     2022-08-23 17:12:04
21  00000031313     2022-10-22 11:16:57
22  00000031313     2022-10-22 12:16:44
23  00000031313     2022-10-22 14:39:07
24  00000065137     2022-05-06 11:51:33
25  00000065137     2022-05-06 11:51:33

我知道我可以df['DELTA'] = df.groupby('ID')['DATE'].shift(-1) - df['DATE']來獲取每個用戶的連續日期之間的差異,但由於像iat[0]這樣的東西在這種情況下不起作用,我不知道如何獲得與第一次約會的差異。

你可以試試這段代碼

import pandas as pd

dates = ['2022-08-23 17:12:04',
         '2022-08-23 17:12:04',
         '2022-10-22 11:16:57',
         '2022-10-22 12:16:44',
         '2022-10-22 14:39:07',
         '2022-05-06 11:51:33',
         '2022-05-06 11:51:33',]
ids = [1,1,1,2,2,2,2]
df = pd.DataFrame({'id':ids, 'dates':dates})
df['dates'] = pd.to_datetime(df['dates'])
df.groupby('id').apply(lambda x: x['dates'] - x.iloc[0, 0])

Out:
id   
1   0       0 days 00:00:00
    1       0 days 00:00:00
    2      59 days 18:04:53
2   3       0 days 00:00:00
    4       0 days 02:22:23
    5   -170 days +23:34:49
    6   -170 days +23:34:49
Name: dates, dtype: timedelta64[ns]

如果你的 dataframe 很大並且apply花了很長時間你可以嘗試使用parallel-pandas 很簡單

import pandas as pd
from parallel_pandas import ParallelPandas

ParallelPandas.initialize(n_cpu=8)

dates = ['2022-08-23 17:12:04',
         '2022-08-23 17:12:04',
         '2022-10-22 11:16:57',
         '2022-10-22 12:16:44',
         '2022-10-22 14:39:07',
         '2022-05-06 11:51:33',
         '2022-05-06 11:51:33',]
ids = [1,1,1,2,2,2,2]
df = pd.DataFrame({'id':ids, 'dates':dates})
df['dates'] = pd.to_datetime(df['dates'])
#p_apply is parallel analogue of apply method
df.groupby('id').p_apply(lambda x: x['dates'] - x.iloc[0, 0])

會快5-10倍

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM