複数のパンダ列のブールインデックス [重複] 質問する

複数のパンダ列のブールインデックス [重複] 質問する

少なくとも 良いPython のライブラリで DataFrame にインデックスを付ける方法に関するチュートリアルを読んでも、複数の列に対して ing を実行pandasするエレガントな方法がまだわかりません。SELECT

>>> d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 8]})
>>> d
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2] # This works fine
   x  y
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2 & d['y']>7] # I had expected this to work, but it doesn't
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

私は(私が思うに)かなり洗練されていないやり方を見つけました。

>>> d[d['x']>2][d['y']>7]

しかし、見た目は良くなく、読みやすさの点でもかなり低いと思います。

もっと良い、より Python らしい方法はありますか?

ベストアンサー1

これは優先順位演算子の問題です。

複数条件テストを機能させるには、括弧を追加する必要があります。

d[(d['x']>2) & (d['y']>7)]

このセクションあなたが言及したチュートリアルでは、いくつかのブール条件と括弧が使用された例が示されています。

おすすめ記事