使用Python减少密钥和小时的桶数

时间:2016-11-02 09:09:08

标签: python algorithm pandas numpy mapreduce

我有一堆KPI(关键绩效指标),其值包含以下结构:

{
    A : [{x : [(hour, value),(hour, value)], y : [(hour, value)]}],
    B : [{d : [(hour, value),(hour, value)], e : [(hour, value)]}]
}

其中AB是存储桶,x, y, d, e是带有(hour, value)元组列表的KPI(键)。

对于每个(bucket, key, hour),我想找到总和和数量:

{(Bucket, Key, Hour): (sum, count)}

在python中执行此操作最简洁有效的方法是什么?我提出的按小时分组和减少分组的大多数方法都很长。

请注意,numpypandas等库可用

1 个答案:

答案 0 :(得分:2)

成功的步骤:

a)展平你的名单

b)创建pandas 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()