読者です 読者をやめる 読者になる 読者になる

メモランダム!!

自分用の端書のため,他の人が読めるようには書いていません.悪しからずm(_ _)m

Python3,Pandas:データフレーム検索色々

Pandasのデータフレームに格納されたデータの検索方法についていろいろ調べたり,試行錯誤したり,結局わからなかったので教えてもらいました.忘れないようにこの記事にメモしておきます.

この記事内では,共通して下記のデータフレームを用います

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
               index=['01-01','01-02','01-03'], columns=['C1', 'C2', 'C3'])

In [3]: df
Out[3]: 
       C1  C2  C3
01-01   1   2   3
01-02   4   5   6
01-03   7   8   9

1.データフレーム中のある要素が,どこの列名,どこの行名に所属するのかを出力する

まずは,Pandasのデータフレーム中のある要素が,どこの列名,どこの行名に所属するのかを獲得する方法について紹介します.
例えば,先程のデータフレームの中から要素の"3"が01-01の行,C3の列に所属する,というのを出力します.

Step.1 Multi-index化

まずは.stack() を使って先程のデータフレームをMulti-indexにします..stack()の解説は下記の通り

In [4]: s_df = df.stack()

In [5]: s_df 
Out[5]: 
01-01  C1    1
       C2    2
       C3    3
01-02  C1    4
       C2    5
       C3    6
01-03  C1    7
       C2    8
       C3    9
dtype: int64
Step.2 タプルから取り出し

"3"が入っているindexを取り出します.タプル形式で格納されるので,要素ごとに取り出せばOK.

In [6]: name = list(s_df[s_df == 3].index)

In [7]: name[0][0] #index
Out[7]: '01-01'

In [8]: name[0][1] #column
Out[8]: 'C3'

一発で出せるメソッドは無いんですかね??

2.Pandasのデータフレームにある値が有るか無いかを検索する

この場合は検索というより判定というのかもしれません.
データフレームに「1」と「10」がそれぞれあるのか無いのかを判定します.

In [9]: 1 in df.values
Out[9]: True

In [10]: 10 in df.values
Out[10]: False

さいごに

ここら辺の話は何故か検索しても出てきませんでした...
教えていただきありがとうございました!