Python新手求助:如何从DataFrame创建以binnumber为键的字典
实现按binnumber分组的字典需求
嘿,刚入门编程和Python的话,这个需求其实很好实现,用pandas的分组功能就能搞定,我给你一步步讲清楚:
准备工作(如果还没做的话)
首先确保你已经导入了pandas,要是需要用到numpy数组的话也可以导入numpy:
import pandas as pd import numpy as np # 可选,如果你需要numpy数组格式的话
示例数据(方便你测试)
先给你一个示例DataFrame,你可以替换成自己的数据集:
data = { 'binnumber': [1, 1, 2, 2, 3], 'x': [10, 20, 30, 40, 50], 'y': [100, 200, 300, 400, 500], 'z': [1000, 2000, 3000, 4000, 5000] } df = pd.DataFrame(data)
两种常用实现方法
方法1:每个binnumber对应x、y、z的行数据列表
这应该是最贴合你需求的方式——键是binnumber的值,对应的值是包含所有该行x、y、z的列表的集合:
# 转成普通Python列表格式 result_dict = df.groupby('binnumber')[['x', 'y', 'z']].apply(lambda g: g.values.tolist()).to_dict() # 如果想要numpy数组格式,把tolist()去掉就行 result_dict_np = df.groupby('binnumber')[['x', 'y', 'z']].apply(lambda g: g.values).to_dict()
比如示例数据里,result_dict[1]会返回[[10, 100, 1000], [20, 200, 2000]],完美对应binnumber=1的两行x、y、z数据。
方法2:每个binnumber对应分字段的数组字典
如果你希望每个键的值是一个字典,单独存储x、y、z各自的数组,可以这么写:
result_dict_separate = df.groupby('binnumber').apply( lambda g: { 'x': g['x'].values.tolist(), 'y': g['y'].values.tolist(), 'z': g['z'].values.tolist() } ).to_dict()
此时result_dict_separate[1]会返回{'x': [10, 20], 'y': [100, 200], 'z': [1000, 2000]},适合需要单独调用x/y/z数组的场景。
小提示
如果你的数据集里有缺失值,可以先通过df.dropna(subset=['x', 'y', 'z', 'binnumber'])清理掉无效行,避免影响结果。
内容的提问来源于stack exchange,提问作者Amr
相关产品推荐
相关产品推荐

