Python 分组并计算元组列表中的平均值
我有一个元组列表,如下所示:Python 分组并计算元组列表中的平均值,python,Python,我有一个元组列表,如下所示: x=[('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ] 我想执行几个任务: 根据第一项对列表进行分组:HSBCXXXX 在每组中,计算列表中具有相同第二项的第三项的平均值 大概是这样的: 第一组: 4的平均值:(179447+1447)/2 第2组: ('HSBC119
x=[('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ]
我想执行几个任务:
('HSBC1199', 81, 864108)
('HSBC1199', 32, 715121)
('HSBC1199', 32, 61521)
平均值为81:864108
使用带浮点的嵌套defaultdict对32=(715121+61521)/2的平均值
from collections import defaultdict
l = [('A1', 'A', 342.5), ('A2', 'A', 509.70), ('A2', 'B', 119.34),
('A1', 'B', 618.42), ('A1', 'A', 173.54), ('A1', 'B', 235.21)]
d = defaultdict(lambda: defaultdict(lambda: defaultdict(float)))
for a,b,c in l:
d[a][b]['sum'] += c
d[a][b]['count'] += 1
d[a][b]['average'] += (c - d[a][b]['average'])/d[a][b]['count']
我们使用的事实是,平均值可以计算为(见:)
返回以下结构:
{
"A1": {
"A": {
"sum": 516.04,
"count": 2.0,
"average": 258.02
},
"B": {
"sum": 853.63,
"count": 2.0,
"average": 426.815
}
},
"A2": {
"A": {
"sum": 509.7,
"count": 1.0,
"average": 509.7
},
"B": {
"sum": 119.34,
"count": 1.0,
"average": 119.34
}
}
}
也许会有帮助。请先读一下
from collections import defaultdict
l = [('A1', 'A', 342.5), ('A2', 'A', 509.70), ('A2', 'B', 119.34),
('A1', 'B', 618.42), ('A1', 'A', 173.54), ('A1', 'B', 235.21)]
d = defaultdict(lambda: defaultdict(lambda: defaultdict(float)))
for a,b,c in l:
d[a][b]['sum'] += c
d[a][b]['count'] += 1
d[a][b]['average'] += (c - d[a][b]['average'])/d[a][b]['count']
{
"A1": {
"A": {
"sum": 516.04,
"count": 2.0,
"average": 258.02
},
"B": {
"sum": 853.63,
"count": 2.0,
"average": 426.815
}
},
"A2": {
"A": {
"sum": 509.7,
"count": 1.0,
"average": 509.7
},
"B": {
"sum": 119.34,
"count": 1.0,
"average": 119.34
}
}
}