我有一个包含3列的表格:
Date Category Value
1/1/2017 Cat1 111
1/2/2017 Cat1 222
1/3/2017 Cat2 333
1/4/2017 Cat3 444
如何使用类别作为键,字典列表[{date:value}]作为值将其转换为字典列表的字典? e.g。
{cat1 : [{1/1/2017 : 111} , {1/2/2017 : 222}]}
{cat2 : [{1/3/2017 : 333}]}
{cat3 : [{1/4/2017 : 444}]}
如何将新词典元素附加到父词典?
然后,可以使用此数据结构绘制多个系列散点图。
编辑:
感谢所有的答案和评论。我尝试了Elisha的答案,它完美无缺。这是在csv文件中读取并构建字典的完整代码。
import csv
from io import StringIO
from itertools import groupby
from operator import itemgetter
input_file = "c:\\path\\to\\test.csv"
with open(input_file, 'r') as file:
content = file.read()
formatted_content = csv.Dictreader(StringIO(content))
result = {}
for category, entries in groupby(sorted(formatted_content, key=itemgetter('Category')), key=itemgetter('Category')):
result[Category] = [{entry['Date']: entry['Value']} for entry in entries]
print(result)
# continue processing the result to plot multiseries chart
答案 0 :(得分:2)
您可以利用python csv.DictReader和itertools.groupby函数:
import csv
from io import StringIO
from itertools import groupby
from operator import itemgetter
values = u'''Date,Category,Value
1/1/2017,Cat1,111
1/2/2017,Cat1,222
1/3/2017,Cat2,333
1/4/2017,Cat3,444'''
reader = csv.DictReader(StringIO(values))
result = {}
for category, entries in groupby(sorted(reader, key=itemgetter('Category')),
key=itemgetter('Category')):
result[category] = [{entry['Date']: entry['Value']} for entry in entries]
答案 1 :(得分:2)
如果您使用pandas,您可以这样做:
df['DateVal'] = [{row.Date : row.Value} for idx, row in df.iterrows()]
df.groupby(by='Category')['DateVal'].apply(list).to_dict()
输出:
{'Cat1': [{'1/1/2017': '111'}, {'1/2/2017': '222'}],
'Cat2': [{'1/3/2017': '333'}],
'Cat3': [{'1/4/2017': '444'}]}