見出し画像

Pandas備忘録(pivot_table)

Excelのピボットテーブルと同じことがpandasでもできます。
Excelでやるのとどっちが楽かって話もありますが・・・

有害事象件数と重症度のクロス集計表を作ってみます。
aggfunc="count"で数えます。

ae_conc.pivot_table(index="aeterm", columns="severity", values="subjid", aggfunc="count")

できましたが該当がなかった時のNaNは嫌ですね。

NaNを0にするには、fill_value=0を指定します。

ae_conc.pivot_table(index="aeterm", columns="severity", values="subjid", aggfunc="count",fill_value=0)

indexをlistで複数の変数を指定するとGroup byができます。

dm.pivot_table(index=["gender","race"], columns="smoke", values="weight", aggfunc="mean")

性別、人種別に、喫煙の有無ごとに体重の平均値を出しています。ただ桁がバラバラで見にくいですね。桁をそろえてみます。

dm_pivot=dm.pivot_table(index=["gender","race"], columns="smoke", values="weight", aggfunc="mean")
dm_pivot.applymap("{:,.1f}".format)

applymapとformatを使って、小数点第一位までとしました。この方法もいずれどこかでやります。

smokeがNo, Yesの順番になっていますが、これをYes、Noにしたいと思います。その時はreindexという関数を使います。

dm_pivot.reindex(["Yes","No"],level=1,axis="columns")

index, columns, valuesはそれぞれ複数指定できます。

dm_pivot=dm.pivot_table(index=["gender","race"], columns={"smoke","doselevel"}, values=["weight","height"], aggfunc="mean")
dm_pivot.applymap("{:,.1f}".format)

これではなんだかよくわからないので実際にはやらないでしょうけど。

この記事が気に入ったらサポートをしてみませんか?