Python/pandasでグルーピングした複数行をカンマ区切りの一行にする方法
Python/pandasを使って、以下のようにグルーピングした複数行を一行にする方法について解説します。
before col1 col2 0 1 hoge 1 2 fuga 2 3 piyo 3 1 foo 4 2 bar 5 3 baz
after:col1でグルーピングした上で、col2を一行に集約 col1 1 hoge,foo 2 fuga,bar 3 piyo,baz
まず、以下のようなデータフレームを準備します。
import pandas as pd df = pd.DataFrame( {"col1":[1,2,3,1,2,3], "col2":["hoge","fuga","piyo","foo","bar","baz"]}, ) print(df)
次に、データフレームをgroupbyでグルーピングします。
そして、apply()で自作関数を実行しますが、その際に、無名関数lambdaを使えば、各行に対して同じ処理を適用します。
自作処理は、指定文字で結合するjoin()を使って、カンマ区切りにしています。
df = df.groupby('col1').col2.apply(lambda s : ','.join(s)) print(df)
lambda無名関数は、非常に便利で記述がすっきりしますので、おすすめです。
以上です。参考まで。
pandas.DataFrame.groupby — pandas 0.22.0 documentation https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html
pandas.DataFrame.apply — pandas 0.22.0 documentation https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html