2016-03-21 4 views
3

Ich mag, dass id Wie Pandas Aggregat Datetime-Objekt verwenden, um int

  id time     number 
0  1 1970-01-01 00:00:00 1 
1  2 1970-01-02 00:00:00 2 
2  1 1970-01-03 00:00:00 2 

ich die groupby wollen

eine Datenrahmen-Struktur haben und die Zeit, aggregieren die pd.Datetime dtype haben int, die die Zeit Delta zu sein, und ich habe die unterhalb Code:

def interval(a): 
    return (np.max(a) - np.min(a)).days 

_df = df.groupby(['id'], as_index=False).agg(
     { 
      "number": numpy.sum, 
      "time": interval, 
     } 
    ) 

die Spaltenzeit hat Ursprung dtype pd.Datetime jedoch die aggregierten Daten int ist, die die Daten in time Spalte vonergibtvon int nach pd.Datetime wie 1970-01-01 00:00:00.000000000

umgewandelt werden Können Sie mir sagen, wie das richtige Ergebnis zu erhalten, die die time Spalte von aggregierten Datenrahmen ist int

Antwort

2

Sie versuchen timedelta-days von np.timedelta64(1, 'D') und dann float zu integer umwandeln von astype:

def interval(a): 
    a = (np.max(a) - np.min(a))/np.timedelta64(1, 'D') 
    return a 

_df = df.groupby(['id'], as_index=False).agg(
     { 
      "number": np.sum, 
      "time": interval, 
     } 
    ) 
_df['time'] = _df['time'].astype(int) 
print _df 

    id number time 
0 1  3  2 
1 2  2  0 
Verwandte Themen