問題
リストを含むデータフレームについて、任意の列が同じ値を持つ行をまとめて、そこに含まれるリストを結合したい。
具体的には、以下のデータフレームの赤枠内の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で確認。
コメント