Pythonのデータフレームに関して、ある特定の値を抜き出すことは意外にも難しいです。
それは、Pythonのデータフレームはデータフレームの形式で扱うことが前提であり、ある行を抜き出したり、切り取ったり、追加したりは非常に簡単に行うことができます。
ただ、値を抜き出そうとする時にはなぜか値として抜き出せず、データフレームの形のままだったり、問題がいろいろ発生します。
ここでは、ある特定の条件を満たすデータフレームの値を抜き出す方法を記載します。
他に多分いい方法とかあるのかもしれませんが、今現状僕の状態ではこれが限界です。
まず、状況として、以下のデータフレームがあったときに、赤枠で囲った20の値を抜き出そうとします。
ここで問題になるのは、上記のような単純なデータフレームであればインデックスがわかり、一発で抜き出すことができますが、大量のデータであったときにインデックス番号を確認してそれを使うことは非常に難しいです。
大量にデータがあったときに、キーとなる列(顧客番号、idなど)を手がかりにデータを抜き出すことが効率的です。
そこで、下のような状況で抜き出そうとします。
つまり、Aの列でAichiの行のBの値を抜き出したいとします。
その時には一度で抜き出すことはできず、二段階踏んで値を抜き出します。
まず、上記と同様のデータフレームを作成します。
import pandas as pd
df = pd.DataFrame({ 'A' : ["Tokyo", "Aichi", "Osaka"],
'B' : [10, 20, 30],
'C' : [100, 200, 300]})
df
次に、Aの列のAichiの行を抜き出します。
a = df[df["A"] == "Aichi"]
print(a)
そうすることで、Aichiを含む行を抜き出すことができました。
最後に、この行のBの列の値を抜き出します。
b = a.at[a.index[0], "B"]
print(b)
このようにすることで、抜き出すことができます。
回りくどいですが、これが僕が現在使っている方法です。
他に方法があればコメント等で教えていただけると幸いです。
import pandas as pd
df = pd.DataFrame({ 'A' : ["Tokyo", "Aichi", "Osaka"],
'B' : [10, 20, 30],
'C' : [100, 200, 300]})
a = df[df["A"] == "Aichi"]
b = a.at[a.index[0], "B"]
print(b)
上記のプログラムのまとめです。
コメント