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

时间:2019-04-24 09:31:07

标签: python-3.x pandas

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

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

我要汇总Key相同的行的列表,即:

  Key       List
0  K1  [A, B, C]

出于我的目的,列表项的顺序无关无关紧要。 Key列在操作后应该是唯一的。

2 个答案:

答案 0 :(得分:3)

在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()

答案 1 :(得分: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'})

哪个给你:

    List
Key 
K1  [A, B, C]