python - 将 Pandas df 转换为字典

标签 python pandas

我需要转换以下格式的 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/

相关文章:

python - 如何在Python条形图中添加x轴刻度标签

python - mypy:在执行期间引发 TypeError

python - 从 Sublime Text 运行 python 速度非常慢

python - 遍历数据框中的行并根据其他列更改列的值

python - 选择 pandas 中 value = 1 的列名称

python - 没有创建它应该创建的 csv 文件

python - OpenCV 错误 : Assertion failed when using COLOR_BGR2GRAY function

python - 保存/加载带有常量的 keras 模型

python - Matplotlib:带有变量的图例条目

python - 与 pandas 中的 dropna() 相反