Pandas groupby: 文字列連結の取得
列の 1 つに文字列が含まれる DataFrame を操作する場合、デフォルトの sum() 関数必ずしも望ましい結果が得られるとは限りません。このようなシナリオでは、各グループの文字列を連結することが目的であり、ここでは包括的な説明と解決策を示します。
次の DataFrame について考えてみましょう。
A B C 0 1 0.749065 This 1 2 0.301084 is 2 3 0.463468 a 3 4 0.643961 random 4 1 0.866521 string 5 2 0.120737 !
デフォルトでは、 sum() を適用します。列 "C" に追加すると、次の出力が得られます。
A 1 Thisstring 2 is! 3 a 4 random dtype: object
グループごとに文字列が連結された目的の出力を取得するには、いくつかの方法があります。
apply メソッドを使用する() 関数:
1 つの方法は、カスタム関数を groupby オブジェクトに適用することです。この関数は、各グループ内の文字列を連結できます。
<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)</code>
別の方法:
apply() 関数とラムダ関数を明示的に使用することで、同じ結果を達成できます。
<code class="python">df.groupby('A')['C'].apply(lambda x: "{%s}" % ', '.join(x))</code>
カスタム ロジックの適用:
空の文字列の削除や特定の区切り文字の適用などのカスタマイズが必要な場合は、ラムダ関数内に独自のロジックを実装できます。
たとえば、空の文字列を削除するには:
<code class="python">df.groupby('A')['C'].apply(lambda x: "{%s}" % ', '.join([c for c in x if c]))</code>
パフォーマンスに関する考慮事項:
カスタム関数を適用すると、組み込みの sum() 関数。したがって、特定の要件に基づいてパフォーマンスへの影響を考慮することをお勧めします。
以上が「groupby」を使用してパンダデータフレーム内のグループ内の文字列を連結する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。