如何匹配字典值与DataFrame的Link列并生成对应键列,实现分组求和透视
解决方案
1. 修复字典格式并建立反向映射
原字典的值是字符串形式的列表,先将其转换为实际列表,再创建链接→样本的反向字典,方便快速查找匹配:
# 处理字典,生成Link到Sample的映射表 link_to_sample = {} for sample, links_str in d.items(): # 去除首尾括号、分割字符串并清理空格,得到真实链接列表 links = [link.strip() for link in links_str.strip('[]').split(',')] for link in links: link_to_sample[link] = sample
2. 新增Parent列
用map方法快速完成匹配,比apply更高效:
df['Parent'] = df['Link'].map(link_to_sample)
处理后DataFrame的Parent列会正确显示对应样本:
| Link | Town1 | Town2 | Town3 | Town4 | Parent |
|---|---|---|---|---|---|
| A1 | 0.124052 | 0.605573 | 0.416875 | 0.068305 | Sample1 |
| B2 | 0.939612 | 0.561737 | 0.321544 | 0.280721 | Sample3 |
| X7 | 0.861338 | 0.479567 | 0.124393 | 0.600126 | Sample2 |
| 8G | 0.981017 | 0.476371 | 0.097894 | 0.930973 | Sample2 |
3. 按Parent分组求和
通过groupby+sum生成目标透视表:
result = df.groupby('Parent')[['Town1', 'Town2', 'Town3', 'Town4']].sum()
最终结果:
| Parent | Town1 | Town2 | Town3 | Town4 |
|---|---|---|---|---|
| Sample1 | 0.124052 | 0.605573 | 0.416875 | 0.068305 |
| Sample2 | 1.842355 | 0.955939 | 0.222287 | 1.531100 |
| Sample3 | 0.939612 | 0.561737 | 0.321544 | 0.280721 |
原代码错误分析
get_key函数中循环df['Link']覆盖了传入的node参数,逻辑完全混乱- 判断
node in d.values()是检查节点是否存在于字符串形式的列表中,即使匹配成功也无法返回对应单个样本键,而是返回所有键的视图,完全不符合需求
内容的提问来源于stack exchange,提问作者Katie S
相关产品推荐
相关产品推荐

