我有一组非常大的数据存储在老式数据库中。我想将它们提取为人类可读的格式(YAML或JSON)。这里的主要目标是通过对类似条目进行分组来避免冗余。
我的数据可以这样总结:
raw = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 1, 'b': 3, 'c': 3, 'd': 4},
{'a': 1, 'b': 4, 'c': 6, 'd': 4},
{'a': 2, 'b': 2, 'c': 9, 'd': 9},
{'a': 2, 'b': 3, 'c': 3, 'd': 4}]
目标是按列a
和b
进行分组,然后将相似的条目组合在一起:
data = {
1: {
'2,3': {c:3, d:4},
4: {c:3, d:4}
},
2: {
2: {c:9, d:4},
3: {c:3, d:4}
},
}
请注意,密钥2
和3
以逗号连接在一起。
最终,我的输出文件将如下所示:
%YAML 1.2
---
1:
2,3:
c: 3
d: 4
4:
c: 6
d: 4
2:
2:
c: 9
d: 4
3:
c: 3
d: 4
使用Pandas进行处理并获取data
字典会很容易吗?
在一天结束时,我将按如下方式使用它:
data = fetch_data(sql_query, groupby=('a', 'b'), group_similar='c')
答案 0 :(得分:1)
你可以:
k = ['a', 'b']
result = {i: {} for i in df[k[0]].unique()}
for vals, data in df.set_index(k).groupby(list(df.drop(k, axis=1).columns)):
for a, df_a in data.groupby(level=k[0]):
res = df_a.reset_index(k[0], drop=True).to_dict('index')
keys = ','.join(map(str, tuple(res.keys())))
result[a].update({keys: list(res.values())[0]})
得到:
{1:
{'2,3': {'c': 3, 'd': 4},
'4': {'c': 6, 'd': 4}},
2: { '3': {'c': 3, 'd': 4},
'2': {'c': 9, 'd': 9}}
}