如何汇总和汇总用于条形图的字典列表
How to aggregate and sum list of dictionaries for use in bar plot
我正在尝试将从数据库查询的数据聚合成分组条形图的特定格式 (ApexCharts.js)。
起点:
all_records= [
{'fruit': 'Apple', 'var1': 1, 'var2': 2},
{'fruit': 'Apple', 'var1': 2, 'var2': 1},
{'fruit': 'Banana', 'var1': 1, 'var2': 3},
{'fruit': 'Cherry', 'var1': 0, 'var2': 1},
{'fruit': 'Cherry', 'var1': 4, 'var2': 0}
]
所需的聚合如下所示:
{'fruit': ['Apple', 'Banana', 'Cherry' ], 'var1': [ 3, 1, 4 ], 'var2': [ 3, 3, 1 ]}
为了得到想要的结果,我尝试使用
from collections import defaultdict
var1_dict = defaultdict(int)
for d in all_records:
var1_dict [d['fruit']] += d['var1']
print(var1_dict)
defaultdict(<class 'int'>, {'Apple': 3, 'Banana': 1, 'Cherry': 4 })
var2_dict= defaultdict(int)
for d in all_records:
var2_dict[d['fruit']] += d['var2']
print(var2_dict)
defaultdict(<class 'int'>, {'Apple': 3, 'Banana': 3, 'Cherry': 1 })
然后我可以使用 list(var1_dict.keys())
得到 ['Apple', 'Banana', 'Cherry']
这是聚合的一部分。
但从这一点来看,我真的不知道如何进行。
这是一个使用 pandas 数据帧的解决方案:
import pandas as pd
all_records= [
{'fruit': 'Apple', 'var1': 1, 'var2': 2},
{'fruit': 'Apple', 'var1': 2, 'var2': 1},
{'fruit': 'Banana', 'var1': 1, 'var2': 3},
{'fruit': 'Cherry', 'var1': 0, 'var2': 1},
{'fruit': 'Cherry', 'var1': 4, 'var2': 0}
]
df = pd.DataFrame(all_records).groupby('fruit').sum().reset_index()
print(df)
res = df.to_dict('list')
print(res)
输出:
{'fruit': ['Apple', 'Banana', 'Cherry'], 'var1': [3, 1, 4], 'var2': [3, 3, 1]}
我正在尝试将从数据库查询的数据聚合成分组条形图的特定格式 (ApexCharts.js)。
起点:
all_records= [
{'fruit': 'Apple', 'var1': 1, 'var2': 2},
{'fruit': 'Apple', 'var1': 2, 'var2': 1},
{'fruit': 'Banana', 'var1': 1, 'var2': 3},
{'fruit': 'Cherry', 'var1': 0, 'var2': 1},
{'fruit': 'Cherry', 'var1': 4, 'var2': 0}
]
所需的聚合如下所示:
{'fruit': ['Apple', 'Banana', 'Cherry' ], 'var1': [ 3, 1, 4 ], 'var2': [ 3, 3, 1 ]}
为了得到想要的结果,我尝试使用
from collections import defaultdict
var1_dict = defaultdict(int)
for d in all_records:
var1_dict [d['fruit']] += d['var1']
print(var1_dict)
defaultdict(<class 'int'>, {'Apple': 3, 'Banana': 1, 'Cherry': 4 })
var2_dict= defaultdict(int)
for d in all_records:
var2_dict[d['fruit']] += d['var2']
print(var2_dict)
defaultdict(<class 'int'>, {'Apple': 3, 'Banana': 3, 'Cherry': 1 })
然后我可以使用 list(var1_dict.keys())
得到 ['Apple', 'Banana', 'Cherry']
这是聚合的一部分。
但从这一点来看,我真的不知道如何进行。
这是一个使用 pandas 数据帧的解决方案:
import pandas as pd
all_records= [
{'fruit': 'Apple', 'var1': 1, 'var2': 2},
{'fruit': 'Apple', 'var1': 2, 'var2': 1},
{'fruit': 'Banana', 'var1': 1, 'var2': 3},
{'fruit': 'Cherry', 'var1': 0, 'var2': 1},
{'fruit': 'Cherry', 'var1': 4, 'var2': 0}
]
df = pd.DataFrame(all_records).groupby('fruit').sum().reset_index()
print(df)
res = df.to_dict('list')
print(res)
输出:
{'fruit': ['Apple', 'Banana', 'Cherry'], 'var1': [3, 1, 4], 'var2': [3, 3, 1]}