分からなかったこと
PandasのDataFrameで、ある列が指定した値だった時に他の列の値を抽出したい。
どういうことかというと、EXCELのvlookupとかindex & matchで行う「表引き」と同じことをPandasのDataFrameでやるにはどうすればいいのか? ということ。
その時の状況
抽出したいデータがある行の名前や場所(index、インデックス)は分からないのでlocやilocでは抽出できなかった。そのため、他の列のデータで行を絞る必要があった。ただし、その列の値は重複がないということは分かっていた。
実現方法
- DataFrameの行を他の列の指定の値で絞る
- locやqueryを使う
- 絞った行のindexを求める
- index[0]を使う
- 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 | ホンダ |
たとえば、上記のようなデータフレームで「マツダ」の株価コードは何かを求めるコードは以下の通りとなる。
df.loc[df.query('銘柄名=="マツダ"')の部分で行を抽出して、index[0]で銘柄名が「マツダ」の行のインデックスを調べる。
print(df.loc[df.query('銘柄名=="マツダ"').index[0], '株価コード'])
7261
df.loc[df.query('銘柄名=="マツダ"')の部分で行を抽出して、index[0]で銘柄名が「マツダ」の行のインデックスを調べる。
df.locを使って、そのインデックスの行の株価コードの値を調べるとマツダの株価コードを求めることができる。
以上、PythonのPandasで表引きをする方法について。
0 件のコメント :
コメントを投稿