2017-08-17 2 views
-1

Existe-t-il un moyen de calculer le centile pour une colonne de données avec le format datetime tout en conservant le format datetime (Y-m-d H: M: S) et non converti en secondes pour la valeur centile? exemple des données au format datetimecentile pour la colonne datetime python

méthode
df: 
0 2016-07-31 08:00:00 
1 2016-07-30 14:30:00 
2 2006-06-24 14:15:00 
3 2016-07-15 08:15:45 
4 2016-08-01 23:50:00 

Répondre

0

describe() sur la colonne datetime ne fonctionne pas de la même manière comme il le fait sur des colonnes entières ou colonnes float

Ainsi, nous pouvons créer notre méthode personnalisée pour faire la même:

import pandas as pd 
from datetime import timedelta 
from datetime import datetime 

base = datetime.now() 
date_list = [base - timedelta(days=x) for x in range(0, 20)]  
df = pd.DataFrame.from_dict({'Date': date_list}) 

df 

          Date 
0 2017-08-17 21:32:54.044948 
1 2017-08-16 21:32:54.044948 
2 2017-08-15 21:32:54.044948 
3 2017-08-14 21:32:54.044948 

def describe_datetime(dataframe, column, percentiles=[i/10 for i in range(1,11)]): 
    new_date = dataframe[column].dt.strftime('%Y-%m-%d').sort_values().values 
    length = len(new_date) 
    for percentile in percentiles: 
     print(percentile, ':', new_date[int(percentile * length)-1]) 

describe_datetime(df, 'Date') 

sortie:

0.1 : 2017-07-30 
0.2 : 2017-08-01 
0.3 : 2017-08-03 
0.4 : 2017-08-05 
0.5 : 2017-08-07 
0.6 : 2017-08-09 
0.7 : 2017-08-11 
0.8 : 2017-08-13 
0.9 : 2017-08-15 
1.0 : 2017-08-17 
+0

cette approche ne fonctionne pas quand je l'ai essayé. J'ai aussi essayé de faire varier le percentile et les valeurs retournées sont les mêmes. –

+0

@ T-Jay J'ai créé une méthode personnalisée pour faire ce que vous cherchiez. –

0

Après avoir essayé du code. J'étais capable de calculer le percentile en utilisant le code ci-dessous, j'ai trié la colonne et utilisé son index pour calculer le percentile. dataframe est « df », colonne avec le format datetime est «date de

date_column = list(df.sort_values('dates')['dates']) 
index = range(0,len(date_column)+1) 
date_column[np.int((np.percentile(index, 50)))]