Help us understand the problem. What is going on with this article?

Pandasでデータフレームを条件指定で参照する

More than 1 year has passed since last update.

Rっぽく条件指定する時に悩んだのでメモ。
ixが今のところ良さそう。

とりあえず、データフレームを作る

>>> df = pd.DataFrame(arange(12).reshape((3, 4)), index=list("ABC"), columns=list("abcd"))
>>> df
   a  b   c   d
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11

スライスで参照する

ixの第1引数に行を指定するスライス。第2引数に列を指定するスライス。
引数の省略は無理みたい。

>>> #行のみ指定
>>> df.ix[ 1: , :]
   a  b   c   d
B  4  5   6   7
C  8  9  10  11
>>>
>>> #列のみ指定
>>> df.ix[ : , 1:3]
   b   c
A  1   2
B  5   6
C  9  10
>>>
>>> #行・列の両方をスライスで指定
>>> df.ix[ 1: , 1:3]
   b   c
B  5   6
C  9  10

インデックス(行番号、列番号)で参照する

抽出するIndex番号をリストで渡してやればいい。インデックスは、名称でもOK。なお、スライスと併用可能な模様。
リストで指定すれば、順番を入れ替えることも可能。

>>> #0行目と2行目、1列目と2列目と3列目を参照する
>>> df.ix[ [0,2], [1,2,3]]
   b   c   d
A  1   2   3
C  9  10  11
>>>
>>> #スライスと併用可
>>> df.ix[[0,2], :]
   a  b   c   d
A  0  1   2   3
C  8  9  10  11
>>> 
>>> #名称で指定
>>> df.ix["B", "b"]
5
>>>
>>> #範囲指定
>>> df.ix["B":"C", "b":"c"]
   b   c
B  5   6
C  9  10
>>>
>>> #名称をリストで指定
>>> df.ix[["A","C"], ["b","a"]]
   b  a
A  1  0
C  9  8

条件式で参照する

ixの行指定か列指定で、条件式を突っ込んでやればいい。
スライスも併用できるので、特定の行全部とか、特定の列全部の場合はスライスで:だけ入れる。

>>> #行の合計が10以上の行だけ抽出
>>> df.ix[df.apply(sum, axis=1) >= 10, :]
   a  b   c   d
B  4  5   6   7
C  8  9  10  11
>>>
>>> #列の最大値が10以上の列だけ抽出
>>> df.ix[ : , df.apply(max, axis=0) >= 10]
    c   d
A   2   3
B   6   7
C  10  11
>>>
>>> #True/Falseでも指定できる
>>> df.ix[ [True,False,True] , [False,False,True,True] ]
    c   d
A   2   3
C  10  11
wwacky
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした