You need to enable JavaScript to run this app. 为神经网络预处理DataFrame:按Name统一每组2行的无循环实现方法
优惠活动
大模型
产品
解决方案
定价
更多

为神经网络预处理DataFrame:按Name统一每组2行的无循环实现方法

大规模DataFrame无循环标准化处理方案

整个方案完全基于pandas向量化操作实现,无Python层面逐行/逐组遍历,计算效率适配百万级以上数据量,完全满足每个Name固定2条记录的处理要求。

核心处理逻辑

分三步完成全流程,所有操作均为底层C实现的向量化计算:

  • 对超过2条记录的Name,自动保留组内Score最高的2条
  • 构建每个Name对应2条记录的完整对齐框架
  • 自动补全不足2条记录的Name,缺失字段填充0

具体实现代码

import pandas as pd
import numpy as np

# 1. 组内排名筛选前2条高分记录
# 先按Name分组、Score降序排序
df_sorted = df.sort_values(by=['Name', 'Score'], ascending=[True, False])
# 生成组内排名,method='first'保证并列分数可任意取前2,无随机额外开销
df_sorted['group_rank'] = df_sorted.groupby('Name')['Score'].rank(
    method='first', 
    ascending=False
)
# 保留排名<=2的记录
df_filtered = df_sorted[df_sorted['group_rank'] <= 2]

# 2. 构建每个Name对应2条记录的完整网格
# 提取所有唯一Name,每个Name重复2次,匹配1、2的组内排名位
all_unique_names = df['Name'].unique()
name_template = pd.DataFrame({
    'Name': all_unique_names.repeat(2),
    'group_rank': np.tile([1, 2], len(all_unique_names))
})

# 3. 对齐数据、补全缺失值
final_processed_df = name_template.merge(
    df_filtered,
    on=['Name', 'group_rank'],
    how='left'
).fillna({
    'Score': 0,
    'Ind1': 0
}).drop(columns='group_rank')

效果匹配验证

针对提供的示例数据,最终输出完全匹配预期:

  • Name A:原有2条记录,排名1为Score34、Ind11,排名2为Score31、Ind13,无补全无删除
  • Name B:原有4条记录,筛选后保留排名1的Score40、Ind12,排名2的Score33、Ind13(并列分数按顺序取任意一条即可,无额外处理)
  • Name C:原有1条记录(排名1为Score21、Ind15),排名2的位置自动补全Score0、Ind1为0的新行

优化提示

  • 若需要并列分数下的随机选择效果,可在初始排序时增加一个随机列作为次级排序键,无额外循环开销
  • 处理千万行级超大DataFrame时,可在分组计算排名时添加sort=False参数,进一步减少排序计算量,提升速度
  • 全程无iterrows、apply逐行遍历逻辑,内存占用和计算速度比循环实现高1~2个数量级,适合神经网络输入的批量预处理场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 14:54:08