将Pandas DataFrame转换为字典,其中列是键,(按列)行是值

kqlmhetl  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(233)

我希望将DataFrame转换为字典,其中列是键,行(按列)是其值。在执行此操作时,我还需要使用分组。

team  id    name  salary
0      Alpha  10    Jack    1000
1      Alpha  15    John    2000
2      Alpha  20    John    2000
3      Bravo  50  Thomas    5000
4      Bravo  55  Robert    6000
5      Bravo  60  Albert    7000

预期输出:

# expected output WITH duplicates
ex = {'Alpha': {'id': [10, 15, 20], 'name': ['Jack', 'John', 'John'], 'salary': [1000, 2000, 2000]},
      'Bravo': {'id': [50, 55, 60], 'name': ['Thomas', 'Robert', 'Albert'], 'salary': [5000, 6000, 7000]}
      }

# expected output WITHOUT duplicates ('name', 'salary')
ex = {'Alpha': {'id': [10, 15, 20], 'name': ['Jack', 'John'], 'salary': [1000, 2000]},
      'Bravo': {'id': [50, 55, 60], 'name': ['Thomas', 'Robert', 'Albert'], 'salary': [5000, 6000, 7000]}
      }

可以使用df.to_dict()来完成吗?

代码示例:

import pandas as pd

d = {'team': ['Alpha', 'Alpha', 'Alpha', 'Bravo', 'Bravo', 'Bravo'],
     'id': [10, 15, 20, 50, 55, 60],
     'name': ['Jack', 'John', 'John', 'Thomas', 'Robert', 'Albert'],
     'salary': [1000, 2000, 2000, 5000, 6000, 7000]}

df = pd.DataFrame(data=d)
djmepvbi

djmepvbi1#

一个Groupby然后to_dict就可以了:

out = df.groupby('team').agg(list).to_dict('index')
print(out)

输出量:

{'Alpha': {'id': [10, 15, 20],
           'name': ['Jack', 'John', 'John'],
           'salary': [1000, 2000, 2000]},
 'Bravo': {'id': [50, 55, 60],
           'name': ['Thomas', 'Robert', 'Albert'],
           'salary': [5000, 6000, 7000]}}

对于唯一列表:

out = df.groupby('team').agg(lambda x: x.unique().tolist()).to_dict('index')
print(out)

# Output:

{'Alpha': {'id': [10, 15, 20],
           'name': ['Jack', 'John'],
           'salary': [1000, 2000]},
 'Bravo': {'id': [50, 55, 60],
           'name': ['Thomas', 'Robert', 'Albert'],
           'salary': [5000, 6000, 7000]}}
rxztt3cl

rxztt3cl2#

    • 预期 输出 WITH 重复 * *
df.groupby('team').agg(list).T.to_dict()

中 的 每 一 个
输出 :

{'Alpha': {'id': [10, 15, 20],
           'name': ['Jack', 'John', 'John'],
           'salary': [1000, 2000, 2000]},
 'Bravo': {'id': [50, 55, 60],
           'name': ['Thomas', 'Robert', 'Albert'],
           'salary': [5000, 6000, 7000]}}

格式

    • 预期 输出 WITHOUT 重复 项 * *
df.groupby('team').agg(lambda x: list(set(x))).T.to_dict()

格式
输出 :

{'Alpha': {'id': [10, 20, 15],
  'name': ['Jack', 'John'],
  'salary': [1000, 2000]},
 'Bravo': {'id': [50, 60, 55],
  'name': ['Thomas', 'Albert', 'Robert'],
  'salary': [5000, 7000, 6000]}}

格式

相关问题