2014-02-17 43 views
2

我有這樣一個數據幀(簡體):熊貓:選擇基於項目的數量在一組

Year ID Value 
0 2000 A  0 
1 2001 A  1 
2 2000 A  2 
3 2000 B  3 
4 2001 B  4 
5 2000 C  5 
6 2001 C  6 
7 1990 D  7 
8 1990 E  8 
9 1991 E  9 
10 1993 E  10 
11 1993 E  11 
12 1994 E  12 

我只是在存在3年或以上的ID興趣。我可以笨拙地通過和測試每個ID

for id in list(Set(df['ID'])): 
    if len(list(Set(df[df['ID']==id]['Year']))) >= 3: 
      df2 = df2.append(df[df['ID']==id]) 

     Year ID Value 
    8 1990 E  8 
    9 1991 E  9 
    10 1993 E  10 
    11 1993 E  11 
    12 1994 E  12 

但似乎應該有一個更簡單的方法。

回答

4

使用groupby-filter

(df.groupby(['ID']) 
    .filter(lambda x: x['Year'].nunique()>=3)) 

產生

Year ID Value 
8 1990 E  8 
9 1991 E  9 
10 1993 E  10 
11 1993 E  11 
12 1994 E  12 

[5 rows x 3 columns] 
+2

輔修:'.nunique()'。 – DSM

+0

@DSM:哦,這很整潔!謝謝。 – unutbu