给出一个包含键列和列表列的数据框:
Key List
0 K1 [A, B]
1 K1 [C]
我要汇总Key
相同的行的列表,即:
Key List
0 K1 [A, B, C]
出于我的目的,列表项的顺序无关无关紧要。 Key
列在操作后应该是唯一的。
答案 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]