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

如何创建以site_name为键、其余列数据为值的DataFrame字典?

解决方案

从已有DataFrame生成目标字典

最简洁的方法是利用Pandas的groupby功能,直接将分组结果转换为字典:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame(
    [[201801, 0.5, 273.4, 'Fleet'], [201801, 0.34, 277.4, 'Drake'], [201801, 0.75, 255, 'Bay'], 
     [201802, 0.97, 244.4, 'Fleet'], [201802, 0.54, 267.4, 'Drake'], [201802, 0.89, 235, 'Bay']], 
    columns=['time', 'windspeed', 'winddir', 'site_name']
)

# 生成目标字典
site_dict = dict(tuple(df.groupby('site_name')))

解释:

  • df.groupby('site_name'):按照site_name列的取值对DataFrame进行分组,返回一个GroupBy对象。
  • tuple(df.groupby('site_name')):将分组对象转换为包含(组名, 子DataFrame)的元组序列。
  • dict(...):把元组序列直接转换为字典,其中元组的第一个元素是键(站点名称),第二个元素是对应的值(包含其余三列数据的子DataFrame)。

你可以通过site_dict['Fleet']查看对应站点的数据,结果会是只包含该站点所有行、且保留time/windspeed/winddir列的DataFrame。


直接从数组创建目标字典

如果你的数据原本是4个独立数组,不需要先合并成大DataFrame的话,可以用collections.defaultdict来分类收集数据,再逐个转换为DataFrame:

from collections import defaultdict
import pandas as pd

# 假设你的四个输入数组
time_arr = [201801, 201801, 201801, 201802, 201802, 201802]
windspeed_arr = [0.5, 0.34, 0.75, 0.97, 0.54, 0.89]
winddir_arr = [273.4, 277.4, 255, 244.4, 267.4, 235]
site_name_arr = ['Fleet', 'Drake', 'Bay', 'Fleet', 'Drake', 'Bay']

# 初始化一个默认字典,每个键对应一个存储列数据的字典
site_data = defaultdict(lambda: {'time': [], 'windspeed': [], 'winddir': []})

# 遍历所有数据点,按站点分类收集
for t, ws, wd, site in zip(time_arr, windspeed_arr, winddir_arr, site_name_arr):
    site_data[site]['time'].append(t)
    site_data[site]['windspeed'].append(ws)
    site_data[site]['winddir'].append(wd)

# 将每个站点的收集数据转换为DataFrame,生成最终字典
site_dict = {site: pd.DataFrame(data) for site, data in site_data.items()}

解释:

  • defaultdict(lambda: {'time': [], ...}):自动为每个新出现的站点创建一个包含空列表的字典,用来存储对应列的数据。
  • zip(...):将四个数组按位置一一配对,遍历每个数据点。
  • 最后用字典推导式,把每个站点的列数据字典转换为DataFrame,直接得到目标字典。

这样就跳过了合并成大DataFrame的步骤,在数据量较大时可能会节省一点内存开销。


内容的提问来源于stack exchange,提问作者splodyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:02:25