Pandas GroupBy: 文字列の共用体を取得する
Pandas のコンテキストでは、groupby 関数は、以下に基づいてデータをグループ化する便利な方法を提供します。特定の列を選択し、結果のグループに対して計算を実行します。ただし、文字列列を扱う場合、sum() などのデフォルトの集計関数が常に望ましい結果をもたらすとは限りません。
列 'A'、'B'、および 'C' を持つ DataFrame があるとします。ここで、「C」には文字列値が含まれます。 groupby("A")["C"].sum() を使用して、各グループの連結文字列を取得できます。
<code class="python">print(df.groupby("A")["C"].sum()) # Output: # A # 1 Thisstring # 2 is! # 3 a # 4 random # Name: C, dtype: object</code>
文字列の和集合 (つまり、各グループの一意の文字列) を取得するにはグループ) の場合、「C」列の要素を反復処理し、中かっこで囲まれたカンマ区切りの文字列を作成するカスタム関数を利用できます。
<code class="python">def get_string_union(group): return "{%s}" % ', '.join(group['C'].unique()) df.groupby('A')['C'].apply(get_string_union) # Output: # A # 1 {This, string} # 2 {is, !} # 3 {a} # 4 {random} # Name: C, dtype: object</code>
別のアプローチでは、apply 関数をラムダ式:
<code class="python">df.groupby('A')['C'].apply(lambda x: "{%s}" % ', '.join(x)) # Output: # A # 1 {This, string} # 2 {is, !} # 3 {a} # 4 {random} # Name: C, dtype: object</code>
より大きな DataFrame に適用すると、カスタム関数を利用して、各グループの必要な文字列の和集合を含むシリーズを返すことができます:
<code class="python">def f(x): return Series(dict(A = x['A'].sum(), B = x['B'].sum(), C = "{%s}" % ', '.join(x['C']))) df.groupby('A').apply(f) # Output: # A B C # A # 1 2 1.615586 {This, string} # 2 4 0.421821 {is, !} # 3 3 0.463468 {a} # 4 4 0.643961 {random}</code>
を利用することで、カスタム関数やラムダ式を使用した apply 関数を使用すると、Pandas を使用して文字列列を含むデータを操作して特定の結果を取得できます。前述のメソッドは、各グループ内の一意の文字列を結合し、それらを目的の形式で返す便利な方法を提供します。
以上がPandas GroupBy で文字列の和集合を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。