如何将Pandas数据框中的重复项转换为指定格式的嵌套字典?
把带重复词汇的DataFrame转换成指定嵌套字典的方法
嘿,这个需求用Pandas就能轻松搞定,我给你两种实用的实现方式,你可以按需选择:
方法一:用groupby快速实现(推荐)
这种方法利用Pandas的分组功能,一行核心代码就能完成转换,简洁高效:
import pandas as pd # 先模拟你的DataFrame(实际使用时替换成你的真实数据) df = pd.DataFrame({ 'category': ['happy', 'unhappy', 'angry', 'confident', 'friendly', 'happy'], 'word': ['tolerance', 'tolerance', 'kill', 'tolerance', 'tolerance', 'kill'], 'score': [0.91, 0.12, 1.0, 0.56, 0.70, 0.01] }) # 核心转换逻辑 target_dict = df.groupby('word').apply(lambda group: group.set_index('category')['score'].to_dict()).to_dict() print(target_dict)
逻辑解释:
groupby('word'):把DataFrame按word列分组,相同词汇的行被归到一组- 对每个分组,用
lambda函数把category设为索引,再将score列转换成{category: score}的小字典 - 最后外层再转成字典,就得到了
{word: {category: score}}的嵌套结构
方法二:逐行遍历(适合新手理解底层逻辑)
如果你想更清晰地控制每一步的转换过程,可以用循环逐行处理:
import pandas as pd df = pd.DataFrame({ 'category': ['happy', 'unhappy', 'angry', 'confident', 'friendly', 'happy'], 'word': ['tolerance', 'tolerance', 'kill', 'tolerance', 'tolerance', 'kill'], 'score': [0.91, 0.12, 1.0, 0.56, 0.70, 0.01] }) target_dict = {} # 遍历DataFrame的每一行 for _, row in df.iterrows(): word = row['word'] category = row['category'] score = row['score'] # 如果当前词汇还没在目标字典里,先初始化一个空字典 if word not in target_dict: target_dict[word] = {} # 将类别和分数对应存入嵌套字典 target_dict[word][category] = score print(target_dict)
额外说明:处理重复的word+category组合
如果你的DataFrame里存在同一个词汇在同一个类别下出现多次的情况(比如happy类别下的tolerance有两个不同的score),上面两种方法会默认保留最后一行的score值。如果需要聚合这些重复项(比如取平均值、求和),可以先做聚合再转换:
# 示例:对重复的word+category组合取平均score target_dict = df.groupby(['word', 'category'])['score'].mean().unstack().to_dict('index')
这里先用groupby(['word', 'category'])做双重分组,用mean()计算平均分数,再用unstack()把类别转成列,最后转成目标字典结构。
内容的提问来源于stack exchange,提问作者Y4RD13
相关产品推荐
相关产品推荐

