简体   繁体   English

将元组字典转换为 dataframe

[英]Convert dictionary of tuples to dataframe

I have the following dictionary:我有以下字典:

{'A': ({'A': 0,
   'B': 0.07142857142857142,
   'J': 0.125,
   'C': 0.2,
   'G': 0.26785714285714285,
   'F': 0.6011904761904762,
   'D': 1.2,
   'E': 1.3111111111111111},
  {'A': ['A'],
   'B': ['A', 'B'],
   'C': ['A', 'C'],
   'J': ['A', 'J'],
   'F': ['A', 'J', 'G', 'F'],
   'G': ['A', 'J', 'G'],
   'D': ['A', 'C', 'D'],
   'E': ['A', 'C', 'D', 'E']}),
 'B': ({'B': 0,
   'A': 0.07142857142857142,
   'J': 0.19642857142857142,
   'C': 0.27142857142857146,
   'G': 0.3392857142857143,
   'F': 0.6726190476190477,
   'D': 1.2714285714285714,
   'E': 1.3825396825396825},
  {'B': ['B'],
   'A': ['B', 'A'],
   'C': ['B', 'A', 'C'],
   'J': ['B', 'A', 'J'],
   'F': ['B', 'A', 'J', 'G', 'F'],
   'G': ['B', 'A', 'J', 'G'],
   'D': ['B', 'A', 'C', 'D'],
   'E': ['B', 'A', 'C', 'D', 'E']}),
 'C': ({'C': 0,
   'A': 0.2,
   'B': 0.27142857142857146,
   'J': 0.325,
   'G': 0.46785714285714286,
   'F': 0.8011904761904762,
   'D': 1.0,
   'E': 1.1111111111111112},
  {'C': ['C'],
   'A': ['C', 'A'],
   'D': ['C', 'D'],
   'B': ['C', 'A', 'B'],
   'J': ['C', 'A', 'J'],
   'F': ['C', 'A', 'J', 'G', 'F'],
   'G': ['C', 'A', 'J', 'G'],
   'E': ['C', 'D', 'E']}),
 'D': ({'D': 0,
   'E': 0.1111111111111111,
   'F': 1.0,
   'C': 1.0,
   'A': 1.2,
   'B': 1.2714285714285714,
   'J': 1.325,
   'G': 1.3333333333333333},
  {'D': ['D'],
   'E': ['D', 'E'],
   'F': ['D', 'F'],
   'C': ['D', 'C'],
   'G': ['D', 'F', 'G'],
   'A': ['D', 'C', 'A'],
   'B': ['D', 'C', 'A', 'B'],
   'J': ['D', 'C', 'A', 'J']}),
 'E': ({'E': 0,
   'D': 0.1111111111111111,
   'F': 1.1111111111111112,
   'C': 1.1111111111111112,
   'A': 1.3111111111111111,
   'B': 1.3825396825396825,
   'J': 1.4361111111111111,
   'G': 1.4444444444444444},
  {'E': ['E'],
   'D': ['E', 'D'],
   'F': ['E', 'D', 'F'],
   'C': ['E', 'D', 'C'],
   'G': ['E', 'D', 'F', 'G'],
   'A': ['E', 'D', 'C', 'A'],
   'B': ['E', 'D', 'C', 'A', 'B'],
   'J': ['E', 'D', 'C', 'A', 'J']}),
 'F': ({'F': 0,
   'G': 0.3333333333333333,
   'J': 0.47619047619047616,
   'A': 0.6011904761904762,
   'B': 0.6726190476190476,
   'C': 0.8011904761904762,
   'D': 1.0,
   'E': 1.1111111111111112},
  {'F': ['F'],
   'D': ['F', 'D'],
   'G': ['F', 'G'],
   'A': ['F', 'G', 'J', 'A'],
   'J': ['F', 'G', 'J'],
   'B': ['F', 'G', 'J', 'A', 'B'],
   'C': ['F', 'G', 'J', 'A', 'C'],
   'E': ['F', 'D', 'E']}),
 'G': ({'G': 0,
   'J': 0.14285714285714285,
   'A': 0.26785714285714285,
   'F': 0.3333333333333333,
   'B': 0.3392857142857143,
   'C': 0.46785714285714286,
   'D': 1.3333333333333333,
   'E': 1.4444444444444444},
  {'G': ['G'],
   'J': ['G', 'J'],
   'F': ['G', 'F'],
   'A': ['G', 'J', 'A'],
   'B': ['G', 'J', 'A', 'B'],
   'C': ['G', 'J', 'A', 'C'],
   'D': ['G', 'F', 'D'],
   'E': ['G', 'F', 'D', 'E']}),
 'J': ({'J': 0,
   'A': 0.125,
   'G': 0.14285714285714285,
   'B': 0.19642857142857142,
   'C': 0.325,
   'F': 0.47619047619047616,
   'D': 1.325,
   'E': 1.4361111111111111},
  {'J': ['J'],
   'G': ['J', 'G'],
   'A': ['J', 'A'],
   'B': ['J', 'A', 'B'],
   'C': ['J', 'A', 'C'],
   'F': ['J', 'G', 'F'],
   'D': ['J', 'A', 'C', 'D'],
   'E': ['J', 'A', 'C', 'D', 'E']})}

And I want to convert it to a dataframe like this one:我想把它转换成一个 dataframe 像这样:

person     connected_person     distance     path
A                 A                O          ['A']
A                 B                0.07       ['A','B']
A                 C                0.2        ['A','C']
A                 D                1.2        ['A','C','D']
A                 E                1.3        ['A','C','D','E']
A                 F                0.6        ['A','J','G','F']
A                 G                0.26       ['A','J','G']
A                 J                0.125      ['A','J']  
B                 A
B                 B
B                 C
B                 D
B                 E
B                 F
B                 G
B                 J
C                 A
C                 B
C                 C
C                 D
C                 E
C                 F
C                 G
C                 J
D                 A
D                 B
D                 C
D                 D
D                 E
D                 F
D                 G
D                 J
E                 A
E                 B
E                 C
E                 D
E                 E
E                 F
E                 G
E                 J
F                 A
F                 B
F                 C
F                 D
F                 E
F                 F
F                 G
F                 J
G                 A
G                 B
G                 C
G                 D
G                 E
G                 F
G                 G
G                 J
J                 A
J                 B
J                 C
J                 D
J                 E
J                 F
J                 G
J                 J

I didn't complete the dataframe for all the persons but the idea is the same: For each person (each key of the dict) I want a column with the person they are connected with, which comes from the first item of each key, the distance between them (which also comes from the first item) and the path taken to reach each node (which comes from the second item of the dict).我没有为所有人完成 dataframe 但想法是一样的:对于每个人(字典的每个键)我想要一个与他们相关的人的列,它来自每个键的第一项,它们之间的距离(也来自第一项)和到达每个节点的路径(来自字典的第二项)。

Thanks!谢谢!

Let d be your dictionary.d成为你的字典。 Then you could do this as follows:然后你可以这样做:

import pandas as pd

cols = ['person', 'connected_person', 'distance', 'path']
df = pd.DataFrame(columns=cols)
for person, (distances, paths) in d.items():
    n = len(distances)
    df_person = pd.DataFrame(columns=cols)
    connected_people = sorted(distances.keys())
    df_person['connected_person'] = connected_people
    df_person['distance'] = [distances[key] for key in connected_people]
    df_person['path'] = [paths[key] for key in connected_people]
    df_person['person'] = person
    df = pd.concat([df, df_person])

print(df)

prints印刷

index指数 person connected_person connected_person distance距离 path小路
0 0 A一个 A一个 0.0 0.0 A一个
1 1 A一个 B 0.07142857142857142 0.07142857142857142 A,B甲,乙
2 2 A一个 C C 0.2 0.2 A,C A,C
3 3 A一个 D D 1.2 1.2 A,C,D A,C,D
4 4 A一个 E 1.3111111111111111 1.3111111111111111 A,C,D,E A,C,D,E
5 5 A一个 F F 0.6011904761904762 0.6011904761904762 A,J,G,F A,J,G,F
6 6 A一个 G G 0.26785714285714285 0.26785714285714285 A,J,G A,J,G
7 7 A一个 J Ĵ 0.125 0.125 A,J A,J
0 0 B A一个 0.07142857142857142 0.07142857142857142 B,A乙,甲
1 1 B B 0.0 0.0 B

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM