2017-08-18 4 views
0

Je me bats pour faire l'agrégation sur timedelta y compris le traçage. Les données brutes sont ici essentiellement les données ont une soumettre (datetime), résolu (datetime), pausetime (timedelta) et résolu de soumission de pause (ce qui est le temps réel pour résoudre)Agrégation de Pandas sur Timedelta et son comportement

click here for data

test_df = pd.read_csv('test_df.csv') 

#convert to date time stamps 
test_df[['Submit','Resolved']] = test_df[['Submit','Resolved']].apply(pd.to_datetime) 

#CONVERT PauseTime and Resolved-Submit-Pausetime to Timedelta 

test_df['PauseTime']=pd.to_timedelta(test_df['PauseTime']) 
test_df['Resolved-Submit-Pausetime'] = pd.to_timedelta(test_df['Resolved-Submit-Pausetime']) 

Je suis en train de regrouper signifie pour chaque jour de « Résolu »

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean() 

qui me donne une erreur - 'DataError: Aucun type numérique pour agréger

1) Comment puis-je agréger sur la moyenne.

2) également quelques conseils pour tracer la tendance du temps moyen pour résoudre (axe x aura toutes les dates et y axe agg moyen timedelta de « Résolu de soumission de pausetime »)

+0

Je suis en mesure d'obtenir test_df.groupby ([pd.Grouper (key = 'Résolu', fréq = 'D ')]) [' Resolved-Submit-Pausetime ']. Describe() travail et la version de mes pandas est' 0.20.3 ' –

Répondre

1

Cette étape permet de convertir votre colonne delta de temps en secondes:

test_df['Resolved-Submit-Pausetime'] = test_df['Resolved-Submit-Pausetime'].astype('timedelta64[s]') 

0  1234.0 
1  27380.0 
2  33017.0 
3  5454.0 
4  433.0 
5  2302.0 
6  21753.0 
7  3405.0 
8  4779.0 
9  3974.0 
10  3389.0 
11  114.0 
Name: Resolved-Submit-Pausetime, dtype: float64 

Lancez ensuite votre déclaration groupby pour calculer la moyenne:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean() 

Resolved 
2017-04-01 20543.666667 
2017-04-02  7485.500000 
2017-04-03  3132.200000 
Name: Resolved-Submit-Pausetime, dtype: float64 

Vous pouvez utiliser Pandas construit pour tracer des outils pour faire un terrain rapide et sale de temps moyen par rapport au jour groupby:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean().plot() 

enter image description here

+0

Merci pour l'aide. Comment pouvons-nous faire l'axe en format hh: mm? –