2015-02-23 21 views
7

yukarıdaki yüzdesi ben bir groupby kullanmak için arıyorum bir DataFrame var ama birlikte toplamak için alışılmadık bir fonksiyonun biraz arıyorum. Her grupta gözlemlerin yüzdesini belirli bir eşiğin üstüne almak istiyorum. Örneğin, 0 bir eşik, DataFrame ilePandalar GroupBy: eşiğin

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 

Ben de oldukça büyük bir veri seti ile çalışıyorum

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 

haline gelmelidir, bu yüzden dikkate hesaplama zaman ayırdığınız takdir ediyorum.

+0

Ve ne denediniz mi? –

cevap

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