You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:54:05