2017-09-24 4 views
2
select df.id, count(distinct airports) as num 
from df 
group by df.id 
having count(distinct airports) > 3 

私はPythonのパンダで上記と同等のことをしようとしています。 filternuniqueaggという異なる組み合わせを試してみましたが、何も問題はありません。何かアドバイス?グループで、パンダで持っている

例:DF

df 
id  airport 
1  lax 
1  ohare 
2  phl 
3  lax 
2  mdw 
2  lax 
2  sfw 
2  tpe 

だから私は結果になりたい:

id  num 
2  5 

答えて

1

あなたはboolean indexingまたはquerySeriesGroupBy.nuniqueを使用することができます。

s = df.groupby('id')['airport'].nunique() 
print (s) 
id 
1 2 
2 5 
3 1 
Name: airport, dtype: int64 

df1 = s[s > 3].reset_index() 
print (df1) 
    id airport 
0 2  5 

または:

df1 = df.groupby('id')['airport'].nunique().reset_index().query('airport > 3') 
print (df1) 
    id airport 
1 2  5 
0

使用GROUPBYとカウント:

df_new = df.groupby('id').count() 

フィルタ:

df_new = df_new[(df_new['airport'] > 3)] 
関連する問題