到目前为止,按同一组中的聚合元素分组 - Pandas
Posted
技术标签:
【中文标题】到目前为止,按同一组中的聚合元素分组 - Pandas【英文标题】:Group by aggregate elements so far in the same group - Pandas 【发布时间】:2021-12-06 01:11:26 【问题描述】:下面是输出应该是什么样子的示例:
数据框:具有所需输出的 df
class_id item req_output
a 1 [1]
a 2 [1,2]
a 3 [1,2,3]
b 1 [1]
b 2 [1,2]
我试过了:
df.groupby("class").apply(lambda x: list(x["item"])
class_id output
a [1,2,3]
b [1,2]
但这只会给出整个聚合,但是考虑到类,我需要在每一行中进行聚合
【问题讨论】:
【参考方案1】:首先,将每个元素组成一个大小为 1 的列表。在这里,我们(利用滥用?)事实[1] + [2] = [1, 2]
。然后按和GroupBy.apply
Series.cumsum
分组。
df["req_output"] = (
df["item"]
.map(lambda x: [x])
.groupby(df["class_id"])
.apply(lambda x: x.cumsum())
)
class_id item req_output
0 a 1 [1]
1 a 2 [1, 2]
2 a 3 [1, 2, 3]
3 b 1 [1]
4 b 2 [1, 2]
或者我们可以创建一个函数来返回所需的列表并使用GroupBy.transform
。
def get_slices(s):
"""
>>> get_slices( pd.Series([1, 2, 3]) )
[[1], [1, 2], [1, 2, 3]]
"""
lst = s.tolist()
return [lst[:i] for i in range(1, len(lst)+1)]
df['req_output'] = df.groupby('class_id')['item'].transform(get_slices)
【讨论】:
利用?更像是虐待? :grin: 这是一个可爱的虐待 @sammywemmy 哈哈,这肯定是在滥用 :P 谢谢你,Sammy。以上是关于到目前为止,按同一组中的聚合元素分组 - Pandas的主要内容,如果未能解决你的问题,请参考以下文章