在Pandas DataFrame中汇总重复行的列表项

4

给定一个包含键列和列表列的数据框:

   Key    List
0  K1  [A, B]
1  K1     [C]

我希望将Key相同的行的列表聚合在一起,即:
  Key       List
0  K1  [A, B, C]

列表项的顺序对我的目的不重要。操作后,“Key”列应该是唯一的。
2个回答

4

在lambda函数中,使用groupby来展开值:

import functools
import operator

from  itertools import chain

f = lambda x: [z for y in x for z in y]
#faster alternative
#f = lambda x: list(chain.from_iterable(x))
#faster alternative2
#f = lambda x: functools.reduce(operator.iadd, x, [])
#slow alternative
#f = lambda x: x.sum()
df = df.groupby('Key')['List'].agg(f).reset_index()

另一种缓慢的替代方案:

df = df.groupby('Key')['List'].sum().reset_index()

我认为as_index不应该是False。当as_index=False时,我得到了ValueError: Shape of passed values is (7, 1), indices imply (1, 1)的错误,而as_index=True则给出了预期的输出结果。 - tsorn
1
@tsorn - 谢谢,我加了 .reset_index() - jezrael

1

使用以下DataFrame:

df = pd.DataFrame({
    'Key': ['K1', 'K1'],
    'List': [['A', 'B'], ['C'],]
})

看起来像:

    Key List
0   K1  [A, B]
1   K1  [C]

您可以使用:

df.groupby('Key').agg({'List': 'sum'})

"这将给你: ",保留HTML标签。
    List
Key 
K1  [A, B, C]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接