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
さいごに
ここら辺の話は何故か検索しても出てきませんでした...
教えていただきありがとうございました!