gijyutsu-keisan.com

3.5.Pandas配列の条件抽出

サンプルデータフレームとして次のものを用います。
>>> A = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z'])
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9
  1. 全体に対する条件抽出
  2. 行/列に対する条件抽出
  3. queryによる抽出
  4. isinによる抽出

(1)全体に対する条件抽出

“=”、“<”、“<=”、“>”、“>=”等の条件に合致したデータフレーム内の要素を抽出します。
>>> A[A>=3]
x    y  z
a  NaN  NaN  3
b  4.0  5.0  6
c  7.0  8.0  9

>>> A[A==3]
x   y    z
a NaN NaN  3.0
b NaN NaN  NaN
c NaN NaN  NaN
“AND”条件は次のように指定します。
>>> A[(3<A) & (A<6)]
x    y   z
a  NaN  NaN NaN
b  4.0  5.0 NaN
c  NaN  NaN NaN
“OR”条件は次のように指定します。
>>> A[(A<3) | (6<A)]
x    y    z
a  1.0  2.0  NaN
b  NaN  NaN  NaN
c  7.0  8.0  9.0
その他詳細はPandas Manual参照下さい。

節はじめに戻る


(2)行/列に対する条件抽出

行に対する条件は次のようになります。
#行'b'より行番号の小さい行を抽出
>>> A[A.index<'b']
x  y  z
a  1  2  3

>>> A[A[:1]<3]
x    y   z
a  1.0  2.0 NaN
b  NaN  NaN NaN
c  NaN  NaN NaN
列に対する条件は次のようになります。
#列"x"の要素の中で2より大きい要素を含む行を抽出
>>> A[A.x>2]
x  y  z
b  4  5  6
c  7  8  9

#列"x"の要素の中で2より小さく7より大きい要素を含む行を抽出
>>> A[(A.x<2) | (7<A.z)]
x  y  z
a  1  2  3
c  7  8  9
その他詳細はPandas Manual参照下さい。

節はじめに戻る


(3)queryによる抽出

“query”を使うと文字列で指定する条件文を数式として扱うことができます。
  • A.query('条件文')
>>> A.query('x>2')
x  y  z
b  4  5  6
c  7  8  9

>>> A.query('(x<2) | (8<z)')
x  y  z
a  1  2  3
c  7  8  9

>>> A.query('not (x<2)|(8<z)')
x  y  z
b  4  5  6
c  7  8  9

>>> A.query('index=="a" | index=="b"')
x  y  z
a  1  2  3
b  4  5  6

節はじめに戻る


(4)isinによる抽出

“isin”で指定した値をデータフレーム内で検索し、一致するとTrue、不一致だとFalseを返します。
  • A.isin(values)
\[ \begin{array}{ccccc} & x & y & z \\ a & 1 & 2 & 3 \\ b & 4 & 5 & 6 \\ c & 7 & 8 & 9 \end{array} \]
#行列全体で検索
>>> A.isin([1,5,9])
x      y      z
a   True  False  False
b  False   True  False
c  False  False   True

#x列内のみ検索
>>> A.isin({'x':[1,5,9]})
x      y      z
a   True  False  False
b  False  False  False
c  False  False  False

>>> A.isin({'x':[1],'y':[5],'z':[9]})
x      y      z
a   True  False  False
b  False   True  False
c  False  False   True
このコマンドを使ってデータフレームから要素を抽出できます。
>>> A[A.isin({'x':[1],'y':[5],'z':[9]})]
x    y    z
a  1.0  NaN  NaN
b  NaN  5.0  NaN
c  NaN  NaN  9.0

節はじめに戻る

参考文献

関連ページ