【pandas】リストを含むデータフレームの任意の列が同じ値を持つ行をまとめて、リストの列を結合したい【Python】

問題

リストを含むデータフレームについて、任意の列が同じ値を持つ行をまとめて、そこに含まれるリストを結合したい。

具体的には、以下のデータフレームの赤枠内のvalue列のリストを結合したい。

import pandas as pd
dict_list = [{'name': 'hoge', 'class': 'huga', 'value': [1, 2]},
             {'name': 'hoge', 'class': 'foo','value': [3, 4]},
             {'name': 'hoge', 'class': 'foo','value': [10, 100]},
             {'name': 'piyo', 'class': 'bar','value': [1000, 10000]},
            ]
df = pd.DataFrame(dict_list)

解決法

groupby()で同じ値を持つデータをまとめて、apply()sum()を適用するのが肝。

df_new = pd.DataFrame(df.groupby(['name', 'class'])['value'].apply(lambda x: x.sum()))
df_new.reset_index(level=[0, 1], inplace=True)

動作はpandasのバージョン1.3.2で確認。

コメント