Pandas Groupby を使用して複数の行からの文字列を連結する
データフレームを操作する場合、複数の行からの文字列を連結する必要がある場合があります。特定の基準に基づいてグループ化します。 Pandas は、groupby 関数とtransform 関数を通じて、この問題に対する便利なソリューションを提供します。
問題ステートメント
列「name」、「text」、および「month」を持つデータフレームが与えられたとします。 」の目的は、「名前」と「月」の一意の組み合わせごとに「テキスト」列の文字列を連結することです。必要な出力は、一意の「名前」と「月」の組み合わせと連結された「テキスト」値を含むデータフレームです。
ソリューション
これを実現するには、次を利用できます。次の手順:
例を示します。コード:
import pandas as pd from io import StringIO data = StringIO(""" "name1","hej","2014-11-01" "name1","du","2014-11-02" "name1","aj","2014-12-01" "name1","oj","2014-12-02" "name2","fin","2014-11-01" "name2","katt","2014-11-02" "name2","mycket","2014-12-01" "name2","lite","2014-12-01" """) # load string as stream into dataframe df = pd.read_csv(data, header=0, names=["name", "text", "date"], parse_dates=[2]) # add column with month df["month"] = df["date"].apply(lambda x: x.month) df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x)) df[['name','text','month']].drop_duplicates()
上記のコードは、次の目的の結果を持つデータフレームを生成します:
name text month 0 name1 hej,du 11 2 name1 aj,oj 12 4 name2 fin,katt 11 6 name2 mycket,lite 12
代替ソリューション
transform( を使用する代わりに) )、apply() を使用してから、reset_index() を使用して同じ結果を達成することもできます。更新されたコードは次のようになります。
df.groupby(['name','month'])['text'].apply(','.join).reset_index()
この簡素化されたバージョンでは、ラムダ式が削除され、より簡潔なソリューションが提供されます。
以上がGroupbyを使用してパンダの複数の行の文字列を連結する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。