[Python] PandasでDataFrameのある列の値をもとに他の列の値を抽出する方法

title_picture


PythonのPandasを使っていて分からなかったことを自分用のメモとして残しておく。 

分からなかったこと

PandasのDataFrameで、ある列が指定した値だった時に他の列の値を抽出したい。
 
どういうことかというと、EXCELのvlookupとかindex & matchで行う「表引き」と同じことをPandasのDataFrameでやるにはどうすればいいのか? ということ。


その時の状況

抽出したいデータがある行の名前や場所(index、インデックス)は分からないのでlocやilocでは抽出できなかった。そのため、他の列のデータで行を絞る必要があった。ただし、その列の値は重複がないということは分かっていた。 


実現方法 

  1. DataFrameの行を他の列の指定の値で絞る 
    • locやqueryを使う 
  2. 絞った行のindexを求める 
    • index[0]を使う 
  3. locを使って値を抽出する 
    • 行はindex[0]、列は抽出したいデータがある列の列名を指定する 

イメージ 

  • 列Aがxの時の列Bの値を抽出する場合 


df.loc[df.query(‘col_A==x’).index[0], ‘col_B’]


具体例 


import pandas as pd

df = pd.DataFrame({'株価コード': [7201, 7203, 7261, 7267], 
				   '銘柄名': ['日産', 'トヨタ', 'マツダ', 'ホンダ']})

print(df)


株価コード 銘柄名
0 7201 日産
1 7203 トヨタ
2 7261 マツダ
3 7267 ホンダ

たとえば、上記のようなデータフレームで「マツダ」の株価コードは何かを求めるコードは以下の通りとなる。

print(df.loc[df.query('銘柄名=="マツダ"').index[0], '株価コード'])

7261


df.loc[df.query('銘柄名=="マツダ"')の部分で行を抽出して、index[0]で銘柄名が「マツダ」の行のインデックスを調べる。

df.locを使って、そのインデックスの行の株価コードの値を調べるとマツダの株価コードを求めることができる。 


以上、PythonのPandasで表引きをする方法について。

ブログは全然更新してないこともあるけど、勉強は少しずつでも積み上げる!

0 件のコメント :