如何将pandas DataFrame转换为以特定列为键的字典,并包含重复值?

2 投票
2 回答
42 浏览
提问于 2025-04-14 17:12

我想把数据表(DataFrame)转换成字典(dictionary)。我有一列可以用作键(key),其他列应该表示为每个键对应的值的列表。不过,我的键列中有重复的值。

这里有一个示例数据表:

import pandas as pd
df = pd.DataFrame({'SL': ['1', '2', '3', '4', '5'],
                    'SITECODE': ['CMCND1', 'CPHGN7', 'LXRPR1', 'LXRPR1', 'LXRPR1'],
                    'TECH': ['3G', '2G', '4G', '3G', '4G'],
                    'PRIORITY': ['P1', 'P2', 'P2', 'P3', 'P3']})

我想要的输出结果,键列的名字是 SITECODE

{'CMCND1': ['1', '3G', 'P1'],
 'CPHGN7': ['2', '2G', 'P2'],
 'LXRPR1': ['3', '4G', 'P2'],['4', '3G', 'P3'],['5', '4G', 'P3']}

我试过用以下公式,但没有得到我想要的结果。

df.set_index('SITECODE').T.to_dict('list')

这个方法没有把重复的键分组在一起。

2 个回答

1

使用一个简单的字典推导式配合 groupby 方法:

out = {k: g.to_numpy().tolist() for k, g in
       df.groupby('SITECODE')[['SL', 'TECH', 'PRIORITY']]}

输出结果:

09

{'CMCND1': [['1', '3G', 'P1']],
 'CPHGN7': [['2', '2G', 'P2']],
 'LXRPR1': [['3', '4G', 'P2'], ['4', '3G', 'P3'], ['5', '4G', 'P3']]}
1

你期望的输出是错误的 - 你可能想要的是一个字典,其中的值是一个列表的列表:

out = (
    df.groupby("SITECODE")
    .apply(lambda g: g.values.tolist(), include_groups=False)
    .to_dict()
)
print(out)

打印结果:

{
    "CMCND1": [["1", "3G", "P1"]],
    "CPHGN7": [["2", "2G", "P2"]],
    "LXRPR1": [["3", "4G", "P2"], ["4", "3G", "P3"], ["5", "4G", "P3"]],
}

撰写回答