2015-02-23 15 views
7

Mam DataFrame, że chcę użyć groupby na, ale szukam trochę niezwykłej funkcji do agregacji z. Chciałbym uzyskać procent obserwacji w każdej grupie powyżej pewnego progu. Na przykład, z progiem 0, DataFramePanda grupa: odsetek powyżej progu

df = pd.DataFrame(dict(day=[1, 1, 1, 2, 2, 2, 3, 3, 3, 4], value=[0, 4, 0, 4, 0, 4, 0, 4, 0, 4])) 

df 
    day value 
0 1  0 
1 1  4 
2 1  0 
3 2  4 
4 2  0 
5 2  4 
6 3  0 
7 3  4 
8 3  0 
9 4  4 

powinna stać

df_group = pd.DataFrame(dict(day=[1, 2, 3, 4], value=[.33, .67, .33, 1.0])) 

df_group 
    day value 
0 1 0.33 
1 2 0.67 
2 3 0.33 
3 4 1.00 

Pracuję też z dość dużego zestawu danych, więc byłbym wdzięczny biorąc pod uwagę czas obliczeń.

+0

I co próbowaliście? –

Odpowiedz

11
>>> df.groupby('day')['value'].apply(lambda c: (c>0).sum()/len(c)) 
day 
1  0.333333 
2  0.666667 
3  0.333333 
4  1.000000 
Name: value, dtype: float64