・お題:複数のDataFrameを纏めて、マルチインデックスやマルチカラムの一つのDataFrameとして扱いたい。
・pandasのDataFrameの扱い方がよく分からなかったので、少し調べてみた。すぐ忘れるので、メモしておく。
・とりあえず、csvをDataFrameとして読み込む。
import pandas as pd
df1=pd.read_csv("xxx_1.csv")
とすると、df1の中身は以下になる。
・デフォルトで読み込むと、indexに0から始まる整数が振られる。別にこれでも問題ないが、せっかくなので、CompoundとDoseをインデックスとして読み込む。
df1=pd.read_csv("xxx_1.csv",index_col=(0,1))
とすると、df1の中身は以下になる。
・ちなみに、df1=pd.read_csv("xxx_1.csv")としてDataFrameを読み込んだ後に、df1.set_index(["Compound","Dose"])としてindexを振ることもできる(結果は割愛)。
・次に、複数のDataFrameをマルチにまとめる方法を考える。
・まず、df2として、df1と似たような構成のcsvを読み込む。
df2=pd.read_csv("xxx_2.csv",index_col=(0,1))
df2の中身は以下。
・DataFrameをくっつけるなら、pd.concat()でいけそう。
pd.concat([df1,df2])
とすると、以下が返ってきた。concatはデフォルトだと縦にくっつけることになる。
・これだとdf1とdf2を区別してくっつけられていない。df1とdf2をkeysとしてくっつけ、マルチインデックスを1層追加したい。
pd.concat([df1,df2],keys=["df1","df2"])
とすると、以下が返ってくる。
・仮にここからdf1のみをとってきたいなら、これをdf3など名付けて、df3.loc["df1"]などすればdf1のデータのみを引っ張ってこれる。
・次に、マルチカラムでくっつける場合を考える。pd.concatはデフォルトが縦にくっつける感じだったので、横にくっつけたい場合は引数にaxis=1を加える。
pd.concat([df1,df2],axis=1)
とすると、以下が返ってくる。
・インデックスの場合と同様に、keysを指定してやれば、マルチカラムになる。
pd.concat([df1,df2],axis=1,keys=["df1","df2"])
・ちなみに、ここからdf2をとってきたい場合、これをdf3など名付けて、df3.loc[:,"df2"]などすればdf2のデータのみを引っ張ってこれる。
・縦持ちの表でずらっと処理した方が、ハンドリング自体は楽かもしれないなぁと少し思った。
おわり。