2016-05-02 11 views
0

In Python habe ich Zeitreihendaten. Der Schlüssel der Daten Datum und der Name und die Daten haben vier Attribute: A, B, C und D.Python - Zusammenfassung Statistiken mit Datum und Name

Ich brauche eine Zusammenfassung der Datenanalyse auf diesem Datensatz zu tun:

1) Für jeden Namen , den Durchschnitt von A, B, C und D

2) Für jeden Namen, die Standardabweichung von A, B, C und D

3) Für jeden Namen, Zählnummer NaN des als Prozentsatz des Gesamt für jede A, B, C und D

Ich bin vertraut mit R aber nicht python. Wenn Sie mir in die richtige Richtung zeigen können, wäre das mehr als genug! Vielen Dank.

asof_dt = pd.date_range('20151231','20160130') 
df1=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df1['name']='alpha' 
df2=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df2['name']='beta' 
df3=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df3['name']='gama' 
df_total = pd.concat([df1,df2,df3]) 
df_total[['name','A','B','C']] 

Antwort

1

Was Sie suchen ist groupBy.

Für Ihr Beispiel:

import pandas as pd 

df_total.groupby(['name']).mean() 
df_total.groupby(['name']).std() 
df_total.groupby(['name']).apply(pd.isnull).sum()/df_total.groupBy(['name']).size() 
+0

wie alles scheint funktioniert, wenn ich die "groupby" in Kleinbuchstaben "groupby" ändere. Die letzte Funktion funktioniert jedoch nicht: AttributError: Kann nicht auf das aufrufbare Attribut 'isnull' von 'DataFrameGroupBy'-Objekten zugreifen, versuche die Methode' apply 'zu verwenden –

+0

@TrexionKameha: Das bekomme ich für Buchungscode, ohne es vorher auszuführen:). Sie können 'apply' mit der Funktion' pandas.isnull' verwenden, um den gleichen Effekt zu erzielen, siehe Bearbeiten. – spiffman

+0

Um die% NaN zu erhalten, sollten Sie durch die Gesamtanzahl (die Länge) dividieren, nicht die Anzahl der Nicht-Null-Werte, die von 'count' bereitgestellt werden. – Alexander

1

describe gibt Ihnen eine ganze Menge Informationen:

>>> df_total.describe() 

       A   B   C   D 
count 93.000000 93.000000 93.000000 93.000000 
mean 0.006006 0.136171 0.024950 0.039227 
std  0.987713 0.996221 1.042611 0.946783 
min -2.193879 -2.958631 -3.012410 -2.714318 
25% -0.604479 -0.436393 -0.514906 -0.574699 
50%  0.012784 0.191079 0.062942 0.087534 
75%  0.535302 0.701117 0.666500 0.833580 
max  2.578850 2.483724 2.460043 2.282775 

Um nur die Zählung zu erhalten, Mittelwert und SD:

>>> df_total.groupby('name').apply(lambda group: group.describe().head(3)) 

    A   B   C   D 
name             
alpha count 31.000000 31.000000 31.000000 31.000000 
     mean -0.076509 0.152993 0.149915 0.180412 
     std  1.056520 1.063591 1.010325 0.778637 
beta count 31.000000 31.000000 31.000000 31.000000 
     mean 0.022814 0.247238 -0.006391 0.059466 
     std  0.862030 0.870068 1.065224 1.055671 
gama count 31.000000 31.000000 31.000000 31.000000 
     mean 0.071712 0.008283 -0.068673 -0.122199 
     std  1.058608 1.060826 1.073273 0.990097 
+0

Junge ... das war einfach ... danke. –

+0

Gibt es einen einfachen Weg zur Zählung von NaN? –

+0

Um% NaN zu erhalten: 'df_total.groupby ('name'). Apply (lambda-Gruppe: group.isnull(). Sum(). Div (len (group)))' – Alexander

Verwandte Themen