在一列列表上的 Pandas groupby
Posted
技术标签:
【中文标题】在一列列表上的 Pandas groupby【英文标题】:Pandas groupby on a column of lists 【发布时间】:2018-09-01 05:57:19 【问题描述】:我有一个 pandas
数据框,其中有一列包含 lists
:
df = pd.DataFrame('List': [['once', 'upon'], ['once', 'upon'], ['a', 'time'], ['there', 'was'], ['a', 'time']], 'Count': [2, 3, 4, 1, 2])
Count List
2 [once, upon]
3 [once, upon]
4 [a, time]
1 [there, was]
2 [a, time]
如何合并List
列并对Count
列求和?预期结果是:
Count List
5 [once, upon]
6 [a, time]
1 [there, was]
我试过了:
df.groupby('List')['Count'].sum()
导致:
TypeError: unhashable type: 'list'
【问题讨论】:
【参考方案1】:一种方法是先转换为元组。这是因为pandas.groupby
要求键是可散列的。元组是不可变和可散列的,但列表不是。
res = df.groupby(df['List'].map(tuple))['Count'].sum()
结果:
List
(a, time) 6
(once, upon) 5
(there, was) 1
Name: Count, dtype: int64
如果您需要将结果作为数据框中的列表,您可以转换回来:
res = df.groupby(df['List'].map(tuple))['Count'].sum()
res['List'] = res['List'].map(list)
# List Count
# 0 [a, time] 6
# 1 [once, upon] 5
# 2 [there, was] 1
【讨论】:
以上是关于在一列列表上的 Pandas groupby的主要内容,如果未能解决你的问题,请参考以下文章
Groupby 在一列 pandas 数据帧上,并使用 GridsearchCv 使用通用 sklearn 管道训练每个组的特征和目标 (X, y)