Python中如何将pandas DataFrame按键分组生成存储多值的字典
问题原因
- 直接用重复索引创建Series后调用
to_dict()会默认保留每个键最后出现的对应值,所以会出现值覆盖 - Series的
to_dict()方法不支持'list'参数,该参数是DataFrame类to_dict()的专属合法参数,所以会触发TypeError
解决方案
方案1:所有值统一存为列表(推荐,后续处理无类型兼容问题)
先按Key分组,将同组的Value聚合为列表后再转字典:
res = df.groupby('Key')['Value'].apply(list).to_dict()
输出格式示例:
{'key1': ['value1', 'value4'], 'key2': ['value2', 'value1'], 'key3': ['value3', 'value2'], 'key5': ['value5']}
方案2:单值直接返回元素本身、多值返回列表(匹配你给出的期望输出)
在分组聚合时加长度判断即可:
res = df.groupby('Key')['Value'].apply(lambda x: x.iloc[0] if len(x) == 1 else x.tolist()).to_dict()
输出格式完全符合你的要求:
{'key1': ['value1', 'value4'], 'key2': ['value2', 'value1'], 'key3': ['value3', 'value2'], 'key5': 'value5'}
内容的提问来源于stack exchange,提问作者user3423407
相关产品推荐
相关产品推荐

