给定一个包含键列和列表列的数据框:
Key List
0 K1 [A, B]
1 K1 [C]
我希望将
Key
相同的行的列表聚合在一起,即: Key List
0 K1 [A, B, C]
列表项的顺序对我的目的不重要。操作后,“Key”列应该是唯一的。
给定一个包含键列和列表列的数据框:
Key List
0 K1 [A, B]
1 K1 [C]
Key
相同的行的列表聚合在一起,即: Key List
0 K1 [A, B, C]
在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()
使用以下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]
as_index
不应该是False。当as_index=False
时,我得到了ValueError: Shape of passed values is (7, 1), indices imply (1, 1)
的错误,而as_index=True
则给出了预期的输出结果。 - tsorn.reset_index()
。 - jezrael