1. ホーム
  2. python

[解決済み] グループ化されたPandasデータフレームをループオーバーする方法は?

2022-02-10 10:40:16

質問

DataFrameです。

  c_os_family_ss c_os_major_is l_customer_id_i
0      Windows 7                         90418
1      Windows 7                         90418
2      Windows 7                         90418

コード

print df
for name, group in df.groupby('l_customer_id_i').agg(lambda x: ','.join(x)):
    print name
    print group

集計されたデータをただループさせようとしているのですが、エラーが発生します。

ValueError: 値が多すぎて解凍できません。

@EdChum さん、期待される出力は以下の通りです。

                                                    c_os_family_ss  \
l_customer_id_i
131572           Windows 7,Windows 7,Windows 7,Windows 7,Window...
135467           Windows 7,Windows 7,Windows 7,Windows 7,Window...

                                                     c_os_major_is
l_customer_id_i
131572           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...
135467           ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...

出力が問題なのではなく、すべてのグループに対してループさせたいのです。

どのように解決するのですか?

df.groupby('l_customer_id_i').agg(lambda x: ','.join(x)) はすでにデータフレームを返しているので、これ以上グループをループすることはできません。

一般的には

  • df.groupby(...) が返されます。 GroupBy オブジェクト(DataFrameGroupByまたはSeriesGroupBy)を使用し、これを使用して、グループを繰り返し処理することができます(docsで説明されているとおりです)。 ここで ). というようなことができます。

    grouped = df.groupby('A')
    
    for name, group in grouped:
        ...
    
    
  • groupbyに関数を適用した場合、例では df.groupby(...).agg(...) (ただし、これは transform , apply , mean 、...)、あなた 組み合わせる の結果 適用 の関数は、異なるグループを一つのデータフレームにまとめます(groupby の 'split-apply-combine' パラダイムにおける適用と結合のステップ)。つまり、この結果は常にDataFrame(または適用された関数によってはSeries)になります。