2016-12-15 6 views
1

パンダのデータフレームを持つと、特定の値、たとえばの "low"を持つ行の一部を効率的に削除できますクラスパンダのデータフレームから特定の属性値を持つ行の一部を削除する方法

import pandas as pd 
import numpy as np 
np.random.seed(3) 
df = pd.DataFrame({"a":[1,2,3,4], "b":[5,6,7,8], "class":['High','Low','Low','Low']}) 
drop_indices = np.random.choice(df.index, int(np.ceil(0.5*df.shape[0])) , replace=True) 
df_subset = df.drop(drop_indices) 
print df 
print df_subset 

出力: はここに私のコードです

a b class 
0 1 5 High 
1 2 6 Low 
2 3 7 Low 
3 4 8 Low 
    a b class 
1 2 6 Low 
3 4 8 Low 

これは、すべてのクラスから削除し、私はそれがクラスから削除する= のみ。

+1

1.サンプルデータを投稿してください。2.予想される結果を出力してください。3.これまでに試したことはありますか?4.コードしてください。 – Zero

答えて

2

ダウンあなたから削除したい行だけにフィルター、それらを削除するにはdropを使用し、その後、削除するメンバーの一部を選択するために、sampleを使用します。

df = df.drop(df[df['class'] == 'Low'].sample(frac=0.33).index) 

結果の出力:

a b class 
0 1 5 High 
2 3 7 Low 
3 4 8 Low 
1

少し違う方法でブーリアンスライシングを使用し、すべての非Low行を保持し、Low行の一部のみを0-1乱数で保持します。

df[(df['class'] != 'Low') | (np.random.rand(len(df)) < .33)] 
関連する問題