2015-02-20 4 views
1

У меня есть панды dataframe ДФ:сортировка панда dataframe на основе частоты строк

Name Score 
AAAA 4 
AAAA 7 
AAAA 12 
AAAA 13 
BBBB 1 
BBBB 1 
CCCC 1 
CCCC 2 
CCCC 27 

Я хочу новый dataframe, который имеет значение от ФРА, только если каждый из «Имени» происходит, по крайней мере 3 разы. т.е. желаемый выход

Name Score 
AAAA 4 
AAAA 7 
AAAA 12 
AAAA 13 
CCCC 1 
CCCC 2 
CCCC 27 

Я знаю df.groupby [ 'Name'] дает частоту каждого имени. Любые предложения, как я могу использовать эту информацию для получения желаемого результата. Спасибо

ответ

2

Возможно, есть более элегантный способ, но это сработает.

import pandas as pd 

df = pd.DataFrame({'Name': ['AAAA' ,'AAAA' ,'AAAA' ,'AAAA' ,'BBBB' ,'BBBB' ,'CCCC' ,'CCCC' ,'CCCC'], 
    'Score': [4 ,7 ,12 ,13 ,1 ,1 ,1 ,2 ,27]}) 

Counts = pd.DataFrame(df['Name'].value_counts()) 
df[df['Name'].isin(list(Counts[Counts[0] >= 3].index))] 
5

использование groupby и filter:

df.groupby("Name").filter(lambda df:df.shape[0] > 2) 
+2

Я kindof не согласен с использованием ФР как имя переменной здесь, я думаю, я бы просто использовать LEN: 'df.groupby ("Name"). фильтр (lambda x: len (x)> 2) ' –

Смежные вопросы