如何将DataFrame中No_1与C_N列关联生成目标字典?
问题描述
现有如下DataFrame数据:
No_1 C_N 1 1 1 2 1 7 2 13 2 6
期望生成格式为{1:[1,2,7],2:[13,6]}的字典,其中键为No_1列的值,值为对应C_N列的数值列表。尝试以下代码未成功,寻求正确实现方法:
import pandas as pd df = pd.read_csv('connection.csv' ,sep=',') for i ,j in zip(range(166),df['No_1']): if i==j: print(df['C_N'])
正确实现方法
方法1:使用groupby + to_dict(推荐)
这是pandas原生的高效解决方案,直接按No_1分组后将C_N聚合为列表,再转换为字典:
import pandas as pd df = pd.read_csv('connection.csv', sep=',') result_dict = df.groupby('No_1')['C_N'].apply(list).to_dict() print(result_dict)
运行后输出结果:{1: [1, 2, 7], 2: [13, 6]},完全符合需求。
方法2:手动遍历构建字典
如果需要更直观的逻辑,可以手动遍历DataFrame行来构建字典:
import pandas as pd df = pd.read_csv('connection.csv', sep=',') result_dict = {} for _, row in df.iterrows(): key = row['No_1'] value = row['C_N'] # 键不存在则初始化空列表 if key not in result_dict: result_dict[key] = [] result_dict[key].append(value) print(result_dict)
原代码问题说明
原代码逻辑不符合需求:
zip(range(166), df['No_1'])将0-165的整数与No_1的值配对,和分组收集的目标无关- 满足
i==j时打印整个C_N列,没有实现按No_1分组收集对应数值的逻辑
内容的提问来源于stack exchange,提问作者jhone aish
相关产品推荐
相关产品推荐

