如何将pandas DataFrame转换为以特定列为键的字典,并包含重复值?
我想把数据表(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"]],
}