2015-02-23 116 views
7

我有我希望使用一個groupby一個數據幀,但我在尋找一個不同尋常的功能與聚集的一點點。我希望每個組的觀測值的百分比高於某個閾值。例如,爲0的閾值時,數據幀熊貓GROUPBY:百分比高於閾值

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 

應該成爲

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 

我也有一個相當大的數據集工作,所以我會很感激考慮計算時間考慮。

+0

還有,你試過嗎? – 2015-02-23 21:11:06

回答

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