如何在没有 pandas 的情况下在 python 中分组
How to groupby in python without pandas
我需要你的帮助来解决这个问题。我试图环顾四周,但找不到任何想要的东西。我也不想使用 pandas。
我找到了一个小例子,它确实工作得很好。但是当我将它应用于我的数据时,它不起作用并且不进行分组。知道它可能来自哪里吗?我会很感激...
这是我的数据和输出:
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]]
非常感谢
对于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]]
我需要你的帮助来解决这个问题。我试图环顾四周,但找不到任何想要的东西。我也不想使用 pandas。 我找到了一个小例子,它确实工作得很好。但是当我将它应用于我的数据时,它不起作用并且不进行分组。知道它可能来自哪里吗?我会很感激...
这是我的数据和输出:
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]]
非常感谢
对于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]]