到目前为止,按同一组中的聚合元素分组 - 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.applySeries.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的主要内容,如果未能解决你的问题,请参考以下文章

$group 按 MongoDb 聚合中的每个唯一字符串

如何从MYSQL中的组中查找前N个记录的查询结果

组中多列的R元素到元素操作

Mongoose 聚合内部查找按字段分组

MongoDB计数按数组元素分组的数组中的匹配字符串

按连续日期分组,忽略 SQL 中的周末