2017-07-04 17 views
0

ユーザーがゲームを乱用したり、まだ遊んでいる場合、バイナリフィールドchurn_flagを計算したいと思います。日数の差と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つの日付の違いが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/conversion-between-datetime-timestamp-and-datetime64) – Mel

答えて

2

Iのみ使用パンダ、変換する必要はないと信じて:

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 
関連する問題