Pandas:如何重新组织字典中的数据

2024-04-19 07:05:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的数据帧对象平面结构(实际上我有6个以上的变量)

 
   VAR1  VAR2 VAR3 VAR4 VAR5 VAR6
0     1     2    3    4    5    6 
1     2     4    6    8   10   12
2     3     6    9   12   15   18
3     4     8   12   16   20   24
4     5    10   15   20   25   30
5     6    12   18   24   30   36

然而,为了获得与其他应用程序的兼容性,我希望有一个这样的结构

 
           NEW1                                             NEW2                                     NEW3 
0   {"id":{"VAR1": 1}}      {"AA":{"VAR2": 2, "VAR3": 3}, "CC":{"BB":{"VAR4": 4, "VAR5": 5}}}      {"TS": 6}
1   {"id":{"VAR1": 2}}      {"AA":{"VAR2": 4, "VAR3": 6}, "CC":{"BB":{"VAR4": 8, "VAR5":10}}}      {"TS":12}
2   {"id":{"VAR1": 3}}      {"AA":{"VAR2": 6, "VAR3": 9}, "CC":{"BB":{"VAR4":12, "VAR5":15}}}      {"TS":18}
3   {"id":{"VAR1": 4}}      {"AA":{"VAR2": 8, "VAR3":12}, "CC":{"BB":{"VAR4":16, "VAR5":20}}}      {"TS":24}
4   {"id":{"VAR1": 5}}      {"AA":{"VAR2":10, "VAR3":15}, "CC":{"BB":{"VAR4":20, "VAR5":25}}}      {"TS":30}
5   {"id":{"VAR1": 6}}      {"AA":{"VAR2":12, "VAR3":18}, "CC":{"BB":{"VAR4":24, "VAR5":30}}}      {"TS":36}

有什么简单的方法可以达到这个结果吗? 我曾尝试使用df.to_dict("index"),但它将所有变量分组在一起,同时我需要将dict拆分为“子字典”,并将它们与这些变量“AAA”、“BBB”、“id”、“TS”关联

谢谢你的提示和建议


Tags: 数据对象id结构dict平面aacc
1条回答
网友
1楼 · 发布于 2024-04-19 07:05:19

创建定义变量与其他标签关系的字典

replace = {'VAR6': 'TS'}
graph = {
    'VAR1': 'id', 'VAR2': 'AA', 'VAR3': 'AA',
    'VAR4': 'BB', 'VAR5': 'BB',
    'BB': 'CC',
    'id': 'NEW1', 'AA': 'NEW2', 'CC': 'NEW2', 'TS': 'NEW3'}

def traverse(k, d):
    path = []
    while k in d:
        k = d[k]
        path.append(k)
    return path

dat = {}
for i, rec in zip(df.index, df.to_dict('records')):
    for k, v in rec.items():
        k = replace.get(k, k)
        cur = dat
        path = traverse(k, thing)
        cur = dat.setdefault(path.pop(), {}).setdefault(i, {})
        while path:
            cur = cur.setdefault(path.pop(), {})
        cur[k] = v


pd.DataFrame(dat)

                  NEW1                                                                      NEW2        NEW3
0  {'id': {'VAR1': 1}}      {'AA': {'VAR2': 2, 'VAR3': 3}, 'CC': {'BB': {'VAR4': 4, 'VAR5': 5}}}   {'TS': 6}
1  {'id': {'VAR1': 2}}     {'AA': {'VAR2': 4, 'VAR3': 6}, 'CC': {'BB': {'VAR4': 8, 'VAR5': 10}}}  {'TS': 12}
2  {'id': {'VAR1': 3}}    {'AA': {'VAR2': 6, 'VAR3': 9}, 'CC': {'BB': {'VAR4': 12, 'VAR5': 15}}}  {'TS': 18}
3  {'id': {'VAR1': 4}}   {'AA': {'VAR2': 8, 'VAR3': 12}, 'CC': {'BB': {'VAR4': 16, 'VAR5': 20}}}  {'TS': 24}
4  {'id': {'VAR1': 5}}  {'AA': {'VAR2': 10, 'VAR3': 15}, 'CC': {'BB': {'VAR4': 20, 'VAR5': 25}}}  {'TS': 30}
5  {'id': {'VAR1': 6}}  {'AA': {'VAR2': 12, 'VAR3': 18}, 'CC': {'BB': {'VAR4': 24, 'VAR5': 30}}}  {'TS': 36}

相关问题 更多 >