2016-01-22 2 views
0

J'ai créé une trame de données et un horodatage groupé et agrégé pour me donner la valeur min et max pour chaque regroupement Le cadre de données résultant ressemble à ceci DF est défini comme patient_id, horodatage Je regroupé les DF par patient_id et je voulais obtenir le min et l'horodatage max pour chaque groupe et je l'ai faitComment accéder aux valeurs des fonctions d'agrégat en Python

bypatient_date = pd.DataFrame(byencounter.agg({'timestamp' : [np.min,np.max]})).reset_index()) 

    patient_id timestamp    
       amin  amax 
0   19 3396-08-21 3396-08-25 
1   99 2723-09-27 2727-03-17 
2  3014 2580-12-02 2581-05-01 
3  24581 3399-07-19 3401-04-13 

Je suis en train de trouver la différence entre le minimum et maximum de chaque patient_id mais J'ai un problème en essayant d'accéder aux valeurs en timestamp amin et timestamp amax Existe-t-il un moyen de le faire sans boucler mais en utilisant des pandas intégrés ou chiffrés

+0

Est-ce vraiment pour les horodatages AAAA-MM-JJ pour le 26 - 34e siècles? – Parfait

+0

Oui, ils sont, ils sont juste trop loin pour protéger les données –

Répondre

2

Il suffit de supprimer le niveau le plus à l'extérieur de l'index de la colonne comme indiqué dans ce SO post. Ensuite amin et amax sont accessibles que leurs propres colonnes où vous pouvez prendre la différence:

bypatient_date = pd.DataFrame(byencounter.groupby('patient_id').\ 
           agg({'timestamp' : [np.min, np.max]})).reset_index(drop=True) 

bypatient_date.columns = bypatient_date.columns.droplevel(0) 
bypatient_date['datediff'] = bypatient_date['amax'] - bypatient_date['amin']