2015-02-23 2 views
7

У меня есть DataFrame, который я ищу, чтобы использовать groupby, но я ищу немного необычную функцию для объединения. Я хотел бы получить процент наблюдений в каждой группе выше определенного порога. Например, с порогом 0, DataFramePandas 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

И что вы пробовали? –

ответ

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 
Смежные вопросы