2017-11-12 13 views
3

次の条件を満たす列を選択したいと思います。パンダの真偽条件に基づいて列を選択する方法

mask = df.select_dtypes(include = ['object']).apply(pd.Series.nunique) > 100 

rbc  False 
pc  False 
pcc  False 
ba  False 
htn  False 
dm  False 
cad  False 
appet False 
pe  False 
ane  False 
class False 
lev_a  True 
lev_b  True 
l_x  False 
dtype: bool 
+0

あなたのパンダのバージョンは何ですか? –

答えて

1

ブールマスク

df.loc[:, mask] 
+0

これは動作しません... Unalignableブール型インデクサとして提供されるシリーズ(ブール値のインデックスシリーズとインデックスされたオブジェクトのインデックスが一致しません – Angela

+0

申し訳ありませんが、それを試してください – piRSquared

+0

... forループを使用しようとすると動作しませんいずれかのI時間にするために LIS = [] : H [i]を== Trueの場合: lis.append [i]は LIS – Angela

2

問題は、あなたのマスクの行数が元のデータフレームの列数と異なる可能性があるとの結果を使用してください(と仮定し、あなたの列がありますオブジェクトと非オブジェクトの混合)。

あなたのセットアップは、これは(あなたがしてloc[]の入力として使用することができます)あなたの基準を満たす列を返す必要があるとします。あなたはあなたのマスクがあるのでmask.indexここではなく、mask.columnsを言いたい

mask.index[mask] 

をインデックスが元のデータフレームの列で構成されるパンダシリーズdf。ここで

は(独自のサンプルデータを提供してください、あなたの将来の質問に、あなたは一般的に、より良い答えを得るでしょう)のサンプルデータとのより完全な例です:

df = pd.DataFrame(np.random.choice(list('abcde'),[10,5]), 
          columns=list('ABCDE')) 

mask = df.select_dtypes(include=['object']).apply(pd.Series.nunique) > 4 

mask.index[mask] 

結果:

Index(['B', 'C'], dtype='object')