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

如何将列表数据按指定列分组转换为行列分离的float64类型新矩阵

实现方案

首先说明:你要存储的Names列是字符串类型,无法直接转换为float64类型,若确实需要数值格式的float64矩阵,需要先对字符串做编码处理,两种可选实现方案如下:

方案1:基于你现有代码修改

你已经通过defaultdict得到了分组结果,只需要对分组结果做转置处理即可得到目标结构:

import numpy as np
from collections import defaultdict

# 你的原有代码
d = defaultdict(list)
for key, val in df2:
    d[key].append(val)

# 新增转换逻辑
# 按Animals的数值排序取对应分组列表
sorted_groups = [d[k] for k in sorted(d.keys())]
# 转置分组列表,得到每行对应不同Animals的结构
target_matrix = np.array(list(zip(*sorted_groups)))

# 如果确实需要float64格式,对字符串做标签编码即可
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
# 先把所有字符串编码为整数,再转float64
encoded_matrix = encoder.fit_transform(target_matrix.flatten()).reshape(target_matrix.shape).astype(np.float64)

运行后target_matrix的结构就和你期望的表格一致,是2行3列的数组。

方案2:直接用pandas内置方法实现,无需手动循环分组

import pandas as pd

# 新增分组内的行号标记
df2['row_id'] = df2.groupby('Animals').cumcount()
# 直接用pivot透视得到目标结构
target_df = df2.pivot(index='row_id', columns='Animals', values='Names').reset_index(drop=True)
# 转numpy数组直接调用.values即可
target_matrix = target_df.values

补充说明

你之前得到的df3不符合预期,是因为dict.items(d)返回的是(分组键, 分组值列表)的二元组集合,转数组后是3行2列的结构,和你期望的行列方向相反,所以需要先提取所有分组值列表再做转置处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:18:03