2016-04-28 19 views
1

複数のブール選択基準を使用して、データフレームから特定の行を削除したいとします。ここに私のテストデータフレームです:複数の条件を使用した行の選択

import pandas as pd 

df = pd.DataFrame({'a':range(0,10,2), 'b':range(0,1000,200)}) 
df['c'] = 10*df.b 
df 

enter image description here

私はこれらの別々のコマンドを使用して、私は、削除したい行を選択することができるよ:

単一の備えDF2を私に残し
df1 = df.ix[df.c>5000] 
df2 = df1.ix[df1.b<800] 
df2 

行:

enter image description here

私はこのようになります。1行使用して行を選択することができるのが大好きだ:

df2 = (df.ix[df.c>5000]) & (df.ix[df1.b<800]) 
df2 

をしかし、それは動作しません。最後に、もちろんこれを削除コマンドに変えたいと思います。あなたの説明に適用しようとしている条件に基づいて選択を行うためには

答えて

1

は、ブール値のインデックスを使用してみてくださいこの:

>> condition = (df.c > 5000) & (df.b < 800) 
>> df2 = df[condition] 

と同じ条件を使用して、削除するために

、あなたこのようにそれを行うことができます。

:これは pd.core.frame.DataFrameを返します

>> df.drop(df[condition].index.tolist()) 

、あなたはここに割り当てるか、またはこのようinplaceフラグを使用したいと思うでしょう210

こちらがお役に立てば幸いです。

+0

回答の最初の半分は、単線!しかし、あなたの答えの2番目のビットは、手動での介入(最初に行cが6000の値を持つことを知った後、実際には "== 6000"と書く必要があります)に依存します。 – thescoop

+0

したがって、条件を使用して行を削除することはできますか?条件を選択するときと同じですか? – Thanos

+0

はい、申し訳ありませんが、おそらく私はそれを明確にしていませんでしたか? – thescoop

1

行を削除する場合は、行を削除せずに、~演算子を使用してブール値ベクトルを反転することができます。

df2 = df[~((df.c > 5000) & (df.b < 800))] 
1

あなたは

indices = df[(df.c > 5000) & (df.b < 800)].index 

により削除し、(インプレース)のようにそれらを削除したいのインデックスを取得することができます。

df.drop(indices, inplace=True) 

あなたは、インデックスをリセットしたい場合は、行います

df = df.drop(indices).reset_index(drop=True) 
関連する問題