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

如何在Pandas中按组加零向量行,生成适配Keras的等尺寸Numpy填充数组

解决方案:从Pandas生成带填充的3D NumPy数组

实现步骤

  1. 按id分组并提取特征:将DataFrame按id列分组,仅保留X1和X2作为特征列。
  2. 确定最大组长度:找到所有分组中行数最多的组,以此作为每个组填充后的目标长度(示例中最大长度为2)。
  3. 填充每个组:对每个分组的特征数据进行填充,不足最大长度的部分用0补全。
  4. 转换为3D NumPy数组:将所有处理后的组组合成最终的3D数组,满足Keras输入格式要求。

完整代码实现

import pandas as pd
import numpy as np

# 初始化示例数据
df = pd.DataFrame([[1, 1.2, 2.2], 
                   [1, 3.2, 4.6],
                   [2, 5.5, 6.6]], columns = ['id', 'X1', 'X2']
                 )

# 1. 按id分组,提取特征列
groups = df.groupby('id')[['X1', 'X2']]

# 2. 获取所有分组的最大行数
max_len = groups.size().max()

# 3. 对每个组进行填充并转换为数组
padded_groups = []
for _, group in groups:
    # 提取当前组的特征数组
    arr = group.values
    # 计算需要填充的行数
    pad_rows = max_len - len(arr)
    # 对数组进行填充:行方向补0,列方向不改动
    padded_arr = np.pad(arr, ((0, pad_rows), (0, 0)), mode='constant', constant_values=0)
    padded_groups.append(padded_arr)

# 4. 组合成最终的3D NumPy数组
result = np.array(padded_groups)

print(result)

输出结果

运行代码后会得到你期望的3D数组:

array([[[1.2, 2.2],
        [3.2, 4.6]],

       [[5.5, 6.6],
        [0. , 0. ]]])

关键细节说明

  • np.pad()的参数((0, pad_rows), (0, 0))表示仅在数组的行方向底部填充pad_rows行,列方向保持不变;constant_values=0指定填充值为0。
  • 最终生成的3D数组形状为(分组数, 最大组长度, 特征列数),完全适配Keras的序列类输入要求。
  • 如果后续特征列数量变化,只需保持填充参数的列方向设置为(0,0)即可,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 12:51:36