我有一个kpi桶(关键性能指标),其值的结构如下:
{
A : [{x : [(hour, value),(hour, value)], y : [(hour, value)]}],
B : [{d : [(hour, value),(hour, value)], e : [(hour, value)]}]
}
其中A
和B
为桶,x, y, d, e
为kpi(键),包含(hour, value)
元组列表。
对于每个(bucket, key, hour)
,我想找到和计数,这样:
{(Bucket, Key, Hour): (sum, count)}
在python中最简洁有效的方法是什么?我想到的大多数按小时分组和缩减的方法都很长。
请注意,numpy
和pandas
等库是可用的
成功的步骤:
a)让你的列表变平
创建熊猫DataFrame
c)做你的任务t = {
'A' : [{'x' : [(3, 1),(5, 2)], 'y': [(4, 1)]}],
'B' : [{'d' : [(4, 3),(4, 1)], 'e' : [(3, 2)]}]
}
t_flatten = [(a,b,c,d) for a in t.keys() for b,x in t[a][0].items() for c,d in x]
print(t_flatten)
[('A', 'y', 4, 1), ('A', 'x', 3, 1), ('A', 'x', 5, 2),
('B', 'e', 3, 2), ('B', 'd', 4, 3), ('B', 'd', 4, 1)]
import pandas as pd
df = pd.DataFrame(t_flatten)
df.groupby([0,1,2]).sum() # Grouped by bucket, key, hour
df.groupby([0,1,2]).count()