gpt4 book ai didi

python - 在没有 Pandas 的情况下对多列进行分组和求和

转载 作者:行者123 更新时间:2023-12-01 07:42:18 24 4
gpt4 key购买 nike

我有一个包含多列的列表,我需要根据两列对行进行分组和求和。我可以在不使用 Pandas 数据框的情况下执行此操作吗?

我的列表中有一个数据集,如下所示:

User   Days  Project
Dave 3 Red
Dave 4 Red
Dave 2 Blue
Sue 4 Red
Sue 1 Red
Sue 3 Yellow
具体来说: [[戴夫,3,红色],[戴夫,4,红色],[戴夫,2,蓝色],[苏,4,红色],[苏,1,红色],[苏,3,黄色]]

我想要做的是在同一行输出一些总计,如下所示:

User   Days  Project   UserDays  ProjectDaysPerUser
Dave 3 Red 9 7
Dave 4 Red 9 7
Dave 2 Blue 9 2
Sue 4 Red 8 5
Sue 1 Red 8 5
Sue 3 Yellow 8 3

因此,我尝试分组两次以获得“ProjectDaysPerUser”,首先按用户分组,然后按项目分组。正是这种双重分组让我感到厌烦。

有没有一种简单的方法可以在不创建 Panda 数据框的情况下做到这一点?

最佳答案

下面的脚本使用 groupby 并将总和的结果附加到列表中。

from itertools import groupby
data = [['Dave', 3, 'Red'], ['Dave', 4, 'Red'], ['Dave', 2, 'Blue'], ['Sue', 4, 'Red'], ['Sue', 1, 'Red'], ['Sue', 3, 'Yellow']]
new_data, final = [], []
userDays=[[k, sum(v[1] for v in g)] for k, g in groupby(data, key = lambda x: x[0])]
projuserDays=[[k, sum(v[1] for v in g)] for k, g in groupby(data, key = lambda x: (x[0], x[2]))]
#add userDays and projectuserdays
for d in data:
for u in userDays:
if d[0]==u[0]:
d.append(u[1])
new_data.append(d)
for p in projuserDays:
if d[0]==p[0][0] and d[2]==p[0][1]:
d.append(p[1])
final.append(d)
print(final)

Result:
[['Dave', 3, 'Red', 9, 7],
['Dave', 4, 'Red', 9, 7],
['Dave', 2, 'Blue', 9, 2],
['Sue', 4, 'Red', 8, 5],
['Sue', 1, 'Red', 8, 5],
['Sue', 3, 'Yellow', 8, 3]]

关于python - 在没有 Pandas 的情况下对多列进行分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56638325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com