2017-07-04 33 views
0

我想計算二進制字段churn_flag,如果用戶轉動遊戲或他/她仍在玩。日期差異和comapre Python中的結果

  1. 我已計算的數據最大值日期

    max_time = data['time'].max() 
    

    結果:

    Timestamp('2017-07-12 01:18:50') (future date) 
    
  2. 我已計算出的每個用戶最大日期:

    data_max_time = pd.DataFrame(data.groupby(['id'])['time'].max()).reset_index() 
    data_max_time.columns = ['id','user_max_time'] 
    

    結果:

    2017-07-11 10:33:11 dtype:datetime64[ns] 
    
  3. 我應該檢查這兩個日期之間的差異是長於還是短於2天。我試圖解決這個問題:

    (np.datetime64(final_data['max_time'],'D')-np.datetime64(final_data['user_max_time'],'D'))< (np.timedelta64(2,'D')) 
    

    結果:

    ValueError: Could not convert object to NumPy datetime 
    

我怎麼能計算真/假(1/0)字段爲每個用戶?

+0

的可能的複製[日期時間之間的轉換,時間戳和datetime64](https://stackoverflow.com/questions/ 13703720 /轉換-日期時間之間-時間戳和 - datetime64) – Mel

回答

2

相信沒有必要轉換,僅使用大熊貓:

rng = pd.date_range('2017-04-03 15:00:07', periods=10, freq='28.5H') 
data = pd.DataFrame({'time': rng, 'id': [1,1,2,2,2,5,5,5,1,2]}) 
print (data) 
    id    time 
0 1 2017-04-03 15:00:07 
1 1 2017-04-04 19:30:07 
2 2 2017-04-06 00:00:07 
3 2 2017-04-07 04:30:07 
4 2 2017-04-08 09:00:07 
5 5 2017-04-09 13:30:07 
6 5 2017-04-10 18:00:07 
7 5 2017-04-11 22:30:07 
8 1 2017-04-13 03:00:07 
9 2 2017-04-14 07:30:07 

max_time = data['time'].max() 

data_max_time = data.groupby('id')['time'].max() 
#data_max_time.columns = ['id','user_max_time'] 
print (data_max_time) 
id 
1 2017-04-13 03:00:07 
2 2017-04-14 07:30:07 
5 2017-04-11 22:30:07 
Name: time, dtype: datetime64[ns] 

print (max_time - data_max_time) 
id 
1 1 days 04:30:00 
2 0 days 00:00:00 
5 2 days 09:00:00 
Name: time, dtype: timedelta64[ns] 


df = (max_time - data_max_time < pd.Timedelta(2, unit='D')).reset_index(name='a') 
print (df) 
    id  a 
0 1 True 
1 2 True 
2 5 False