2017-09-08 2 views
-1

Voici ce que je suis en train de faire, des exemples dans une trame de données de pandas géants disent df est:Agréger les valeurs et les totaux dans un pandas géants dataframe

ID Date Amount 

A 5/11/16  5 
B 12/10/16 27 
B 13/10/16 45 
B 14/10/16 2 
A 5/12/16  89 
C 28/1/16  34 
D 29/8/16  12 
D 20/5/16  12 
C 2/1/17  90 

Pour chaque ID, je veux la différence des dates (nombre de jours) dans une liste, montants dans une autre liste, somme des montants dans la liste finale.

sortie soit:

A [30] [5,89] [94] 

B [01,01] [27,45,2] [74].. 

J'ai essayé de groupe databy.

df = df.groupby ('ID') [ 'Montant'] appliquer (liste)

cela donne me données groupées par ID et montant dans une liste mais je ne suis pas capable de comprendre comment obtenir des dates diff.

+1

Quelle est votre question? Qu'avez-vous essayé? Ce qui n'a pas fonctionné? – DyZ

+0

mis à jour maintenant .... –

Répondre

0

Vous pouvez grouper par ID et effectuer quelques regroupements.

df.Date = pd.to_datetime(df.Date, format='%d/%m/%y') # convert to a date column 
df = df.groupby('ID').agg({'Date' : lambda x: x.diff().dropna().dt.days, \ 
          'Amount' : [lambda y: y.values.tolist(), 'sum']}) 
df.columns = ['Diff', 'Amount', 'Total'] 

df 

     Diff  Amount Total 
ID        
A  30  [5, 89]  94 
B [1, 1] [27, 45, 2]  74 
C  340  [34, 90] 124 
D  -101  [12, 12]  24