2
リスト列を持つPandasデータフレームで単純なgroupby操作を実行しようとしています(各グループに対応するリストを連結することを目的として)。単一の列でグループ化するとうまく動作しますが、2つの列にグループ化すると失敗する理由を説明できません。簡単な例:私はa
とb
(すなわちx.groupby(['a','b'])['c'].sum()
)上のグループにしようとした場合 複数の列をグループ化するときにPandasがgroupbyとリストの列を連結します
x.groupby('b')['c'].sum()
b
a [1, 2, 3, 4, 5, 6]
b [7, 8]
dtype: object
x.groupby('a')['c'].sum()
a
1 [1, 2, 3, 4]
2 [5, 6, 7, 8]
dtype: object
しかし、それは常にValueError: Function does not reduce
で失敗し
a
または
b
作品にグループ化する今
x = pd.DataFrame({'a':[1,1,2,2],'b':['a','a','a','b'],'c':[[1,2],[3,4],[5,6],[7,8]]})
a b c
0 1 a [1, 2]
1 1 a [3, 4]
2 2 a [5, 6]
3 2 b [7, 8]
、 。これは起こるべきなぜ私たちはただのリストを連結しているいずれかの方法として、見ることはできませんが、私はそれがパンダの内部とは何かを持っている想像面に
...
回避策や説明?
これは、 'c'列が数値列の場合にはうまく動作しますので、これは' sum'関数がリストの扱いを理解していないことが関係していると思います。時にはそれは正しいことをするでしょうが、何らかの理由で2回目と呼ばれる方法でそれを崩してしまいます。 – cd98
ああ、良い点。私はそれをチェックすべきだった。いずれにしても、@ kabanusはバグである可能性が高いと思います(私たちがPythonであれば、 'sum'はうまくいけません)。 – moustachio
間違いなくバグですが、 '.apply(sum)'がリスト上で 'sum'関数をどのように動作させるのか興味があります。 – cd98