kaeken(嘉永島健司)Techブログ

主に情報科学/情報技術全般に関する知見をポストします。(最近は、特にData Science、機械学習、深層学習、統計学、Python、数学、ビッグデータ)

Python/pandasでグルーピングした複数行をカンマ区切りの一行にする方法

f:id:kaeken:20180131225205p:plain

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