2016-08-29 6 views
0

私はdfというデータフレームを持っています(これは単なる例で、実際のデータは大きく、計算速度を考慮してください)Python pandas:データのサイズが値以下のデータフレーム内のデータを削除する

name id  text 
    tom 1  a1 
    lucy 2  b1 
    john 3  c1 
    tick 4  d1 
    tom 1  a2 
    lucy 2  b2 
    john 3  c2 
    tick 4  d2 
    tom 1  a3 
    lucy 2  b3 
    john 3  c3 
    tick 4  d3 
    tom 1  a4 
    tick 4  d4 
    tom 1  a5 
    lucy 2  b5 
    tick 4  d5 

データフレームは、名前(tom、john、lucy、tick)でグループ化できます。私は、各グループのサイズ(名前で)が5以下であるというデータを削除したいと思います。ルーシーとジョンの名前のサイズが5より小さいので、これらのデータを削除して新しいdfを取得したいタムデータ)を含む。

どうすればいいか教えてください。ありがとう!

+0

あなたのコメントのおかげで、私は私の質問を更新しました。それは5 – tktktk0711

答えて

2

私はこのためにフィルタを使用できると思います。それだけで1行のようになります。

df = pd.DataFrame({'name': ['tom','lucy','john','tick','tom','lucy','john','tick', 'tom', 'lucy','john','tick','tom','tick','tom', 'lucy','tick'], 'id':[1,2,3,4,1,2,3,4,1,2,3,4,1,4,1,2,4],'text':['a1','b1','c1','d1','a2','b2','c2','d2','a3','b3','c3','d3','a4','d4','a5','b5','d5']}) 

df.groupby('name').filter(lambda x: len(x) >= 5) 

と出力だけでダニとトムさ:

id name text 
0 1 tom a1 
3 4 tick d1 
4 1 tom a2 
7 4 tick d2 
8 1 tom a3 
11 4 tick d3 
12 1 tom a4 
13 4 tick d4 
14 1 tom a5 
16 4 tick d5 
+0

あなたの答えに感謝! – tktktk0711

+0

問題ありません。あなたが好きなら、それを受け入れてください。 – dleal

2

をあなたは、あなたがインデックスをリセットすることができますしたい場合は、その後、value_counts()を使用することができますreset_index()

s = df.name.value_counts() 
print(df[df.name.isin(s[s > 4].index)].reset_index(drop=True)) 
    name id text 
0 tom 1 a1 
1 tick 4 d1 
2 tom 1 a2 
3 tick 4 d2 
4 tom 1 a3 
5 tick 4 d3 
6 tom 1 a4 
7 tick 4 d4 
8 tom 1 a5 
9 tick 4 d5 
+0

あなたの答えに感謝します。 sを取得する方法を追加する方が良いです。つまり、s = df.name.values_counts()を意味します。 – tktktk0711

+0

@ tktktk0711うわー、私はそこにその行があった、それを編集したとき、私は再びそれを挿入するのを忘れたと思う。それをキャッチするためにありがとう。私の編集を見てください。 –

関連する問題