2017-02-06 43 views
1

我有大約200萬行...我發現了一堆答案,可以得到總體的平均時間 - 但我試圖得到每個時間戳的平均時間,每個用戶。也沒有禁止狀態必須= 1熊貓的用戶之間的交易或訂單的平均時間

UID timestamp    Not_banned 
3 2013-05-02 08:42:44 1 
2 2013-05-02 14:05:57 1 
2 2013-05-02 17:36:51 1 

所以輸出會像

UID avg_btwn_txn 
3 1.5 
2 63.2 
6 22.1 

我想:

df.groupby( 「UID」) 「時間戳」]的意思()

...但這個代碼只是錯誤了。

「DataError:沒有數字類型彙總」

回答

2

我認爲你需要過濾第一boolean indexing,然後用自定義的lambda函數groupbyheretimedeltas轉換爲hours和轉換回timedelatas被刪除):

df1 = df[df['Not_banned'] == 1] 
     .groupby('UID') 
     .Timestamp 
     .apply(lambda x: (x-x.min()).astype('m8[h]').mean()) 
     .reset_index() 

print (df1) 
    UID Timestamp 
0 2  1.5 
1 3  0.0 

query與另一種解決方案:

df1 = df.query("Not_banned == 1") 
     .groupby('UID').Timestamp 
     .apply(lambda x: (x-x.min()).astype('m8[h]').mean()) 
     .reset_index() 
+0

你能幫我理解x-x.min()在那裏做什麼嗎? – jhub1

+1

是的,它用最小的值減去所有的值,所以輸出是一系列timedeltas。然後轉換爲'小時'在哪裏可以找到'意味着' – jezrael