pandas で groupby をして for ループを回すと便利そう、という小ネタです。
特定のカラムの要素ごとにデータフレームを切り分けて持っておきたい、という時に、カラムの要素をキーにして、グルーピングしたデータフレームをバリューとした辞書型で持っておきたいケースがあります。
例えば、こんなダミーデータがあったときに、group が x のときのデータフレームと、yのときのデータフレームに切り分けたい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd df = pd.DataFrame({"A": [1, 2, 3, 4, 5, 6], "B": [6, 5, 4, 3, 2, 1], "group": ["x", "x", "x", "y", "y", "y"]}) print(df) ``` A B group 0 1 6 x 1 2 5 x 2 3 4 x 3 4 3 y 4 5 2 y 5 6 1 y ``` |
groupby で for 文回すとこんなふうになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
for grp in df.groupby("group"): print(grp[0]) print(grp[1]) ``` x A B group 0 1 6 x 1 2 5 x 2 3 4 x y A B group 3 4 3 y 4 5 2 y 5 6 1 y ``` |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
group_dict = {} for grp in df.groupby("group"): group_dict[grp[0]] = grp[1] print(group_dict) ``` {'x': A B group 0 1 6 x 1 2 5 x 2 3 4 x, 'y': A B group 3 4 3 y 4 5 2 y 5 6 1 y} ``` # group の要素を key にしてデータフレームが取り出せる group_dict["x"] ``` A B group 0 1 6 x 1 2 5 x 2 3 4 x ``` ``` |
おわり