我需要转换以下格式的 df:
d = {
'A': ['a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2'],
'B': ['b1', 'b1', 'b1', 'b1', 'b2', 'b2', 'b2', 'b3', 'b3', 'b3', 'b3', 'b3', 'b3', 'b4', 'b4', ],
'C': ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14', 'c15', ],
}
df = pd.DataFrame(d)
df
A B C
0 a1 b1 c1
1 a1 b1 c2
2 a1 b1 c3
3 a1 b1 c4
4 a1 b2 c5
5 a1 b2 c6
6 a1 b2 c7
7 a2 b3 c8
8 a2 b3 c9
9 a2 b3 c10
10 a2 b3 c11
11 a2 b3 c12
12 a2 b3 c13
13 a2 b4 c14
14 a2 b4 c15
到以下格式的字典:
outDict = {
'a1': {
'b1': ['c1', 'c2', 'c3', 'c4'],
'b2': ['c5', 'c6', 'c7'],
},
'a2': {
'b3': ['c8', 'c9', 'c10', 'c11', 'c12', 'c13'],
'b4': ['c14', 'c15'],
}
}
即 A 列中的值成为一级键; B 列二级键中的值和 C 列中的值是一个列表。
任何指针?
最佳答案
这是使用 pivot_table
的另一种方法:
out = {k:v.dropna().to_dict() for k,v in
df.pivot_table('C','B','A',aggfunc=list).items()}
{'a1': {'b1': ['c1', 'c2', 'c3', 'c4'], 'b2': ['c5', 'c6', 'c7']},
'a2': {'b3': ['c8', 'c9', 'c10', 'c11', 'c12', 'c13'], 'b4': ['c14', 'c15']}}
关于python - 将 Pandas df 转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60611889/