我有一个pandas数据帧df:
Name Score
AAAA 4
AAAA 7
AAAA 12
AAAA 13
BBBB 1
BBBB 1
CCCC 1
CCCC 2
CCCC 27
我想要一个新的数据帧,只有每个" Name"发生至少3次。即所需的输出是
Name Score
AAAA 4
AAAA 7
AAAA 12
AAAA 13
CCCC 1
CCCC 2
CCCC 27
我知道df.groupby [' Name']给出了每个名字的频率。 有关如何使用此信息获取所需输出的任何建议。感谢
答案 0 :(得分:5)
使用groupby
和filter
:
df.groupby("Name").filter(lambda df:df.shape[0] > 2)
答案 1 :(得分: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))]