如何在没有Pandas的情况下使用python进行分组

2024-10-02 10:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个问题上我需要你的帮助。我试着四处看看,但找不到想要的东西。我也不想用熊猫。 我找到了一个小例子,效果非常好。但当我将其应用于我的数据时,它不起作用,也不进行分组。知道它是从哪里来的吗?我将非常感激

以下是我的数据和输出:

liste_of_values =
    [[0, 0, 'sv_SE', 'SE', 'Tarket', '04/18/2021'],
     [1, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [2, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [3, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [4, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [5, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [7, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [8, 1, 'sv_SE', 'SE', 'Tarket', '04/18/2021'],
     [9, 1, 'sv_SE', 'SE', 'Tarket', '04/18/2021'],
     [10, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [11, 1, 'sv_SE', 'SE', 'Tarket', '04/18/2021'],
     [12, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [13, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [14, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [15, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [16, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [17, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [18, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [19, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [20, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [21, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021'],
     [22, 0, 'en_EU', 'EU', 'Tarket', '04/18/2021']]

groupby =[[k, sum(int(v[1]) for v in g)] for k, g in groupby(list_of_values, key = lambda x: (x[3], x[4], x[5]))]

OUTPUT :

[[('SE', 'Tarket', '04/18/2021'), 0],
 [('EU', 'Tarket', '04/18/2021'), 0],
 [('SE', 'Tarket', '04/18/2021'), 2],
 [('EU', 'Tarket', '04/18/2021'), 0],
 [('SE', 'Tarket', '04/18/2021'), 1],
 [('EU', 'Tarket', '04/18/2021'), 0]]

以下是我发现的(有效的)示例:

from itertools import groupby
data = [['Dave', 3, 'Red'], ['Dave', 4, 'Red'], ['Dave', 2, 'Blue'], ['Sue', 4, 'Red'], ['Sue', 1, 'Red'], ['Sue', 3, 'Yellow']]
projuserDays=[[k, sum(v[1] for v in g)] for k, g in groupby(data, key = lambda x: (x[0], x[2]))]

OUTPUT: 

[[('Dave', 'Red'), 7],
 [('Dave', 'Blue'), 2],
 [('Sue', 'Red'), 5],
 [('Sue', 'Yellow'), 3]]

多谢各位


Tags: of数据inforredenvaluessum
1条回答
网友
1楼 · 发布于 2024-10-02 10:25:30

对于itertools.groupby,在分组之前,您必须按相同的键对数据进行排序:

>>> key = lambda x: (x[3], x[4], x[5])                                      
>>> [[k, sum(int(v[1]) for v in g)] for k, g in groupby(sorted(list_of_values, key=key), key=key)]                                                  
[[('EU', 'Tarket', '04/18/2021'), 0], [('SE', 'Tarket', '04/18/2021'), 3]]

相关问题 更多 >

    热门问题