如何在Pandas中按组加零向量行,生成适配Keras的等尺寸Numpy填充数组
解决方案:从Pandas生成带填充的3D NumPy数组
实现步骤
- 按
id分组并提取特征:将DataFrame按id列分组,仅保留X1和X2作为特征列。 - 确定最大组长度:找到所有分组中行数最多的组,以此作为每个组填充后的目标长度(示例中最大长度为2)。
- 填充每个组:对每个分组的特征数据进行填充,不足最大长度的部分用
0补全。 - 转换为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
相关产品推荐
相关产品推荐

