Pandas 对多列进行分组时使用 groupby 连接列表列

Pandas concatenate list columns with groupby when grouping on multiple columns

我正在尝试对具有列表列的 Pandas 数据框执行简单的 groupby 操作(目的是连接与每个组对应的列表)。在单个列上分组时它工作正常,但由于我无法解释的原因在两列上分组时失败。一个简化的例子:

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]

现在,按 ab 分组按预期工作:

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

但是,如果我尝试对 ab(即 x.groupby(['a','b'])['c'].sum())进行分组,它总是会因 ValueError: Function does not reduce 而失败。

从表面上看,我不明白为什么会发生这种情况,因为无论哪种方式我们都只是连接列表,但我想这与 Pandas 内部结构有关...

任何解决方法或解释?

我认为这可能是一个错误,当无法对某些行求和时求和失败,例如最后两行将与双分组保持拆分。解决方法是应用:

import pandas as pd
x = pd.DataFrame({'a':[1,1,2,2],'b':['a','a','a','b'],'c':[[1,2],[3,4],[5,6],[7,8]]})
print x
   a  b       c
0  1  a  [1, 2]
1  1  a  [3, 4]
2  2  a  [5, 6]
3  2  b  [7, 8]
print  x.groupby(('a'))['c'].apply(sum)
a
1    [1, 2, 3, 4]
2    [5, 6, 7, 8]
Name: c, dtype: object
print x.groupby(('a'))['c'].sum()
a
1    [1, 2, 3, 4]
2    [5, 6, 7, 8]
dtype: object
print x.groupby(('a','b'))['c'].apply(sum)
a  b
1  a    [1, 2, 3, 4]
2  a          [5, 6]
   b          [7, 8]
Name: c, dtype: object

我认为你也应该将此提交给 pandas 团队。