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

请求优化Pandas代码:将ADC_TYPE列按值拆分至独立列(适配大数据量)

优化后的Pandas拆分ADC_TYPE列方案

针对数十万行数据、16种唯一ADC_TYPE的场景,以下是高效简洁的Pandas实现方案,可保持原始RAW数据及对应ADC值的顺序不变:

核心思路

利用Pandas内置的pivot或groupby+unstack方法(均为矢量优化操作,性能远优于循环),将ADC_TYPE列的不同值拆分为独立列,同时通过指定索引和列顺序保留原始数据的顺序。

假设原始数据结构

假设你的DataFrame(命名为df)包含以下核心列:

  • RAW_ID:RAW数据的唯一标识(用于分组,确保同一RAW数据的所有ADC值归到同一行)
  • ADC_TYPE:ADC类型(共16种唯一值)
  • VALUE:对应ADC_TYPE的测量值

高效实现代码

方案1:使用pivot(无重复RAW_ID+ADC_TYPE组合时首选)

# 获取ADC_TYPE的原始出现顺序(可选,若需保持列顺序与首次出现一致)
adc_col_order = df['ADC_TYPE'].unique()

# 执行 pivot 操作,拆分列并保留RAW_ID顺序
pivoted_df = df.pivot(
    index='RAW_ID',
    columns='ADC_TYPE',
    values='VALUE'
)[adc_col_order].reset_index()

# 重置列名(移除多级索引)
pivoted_df.columns.name = None

方案2:使用groupby+unstack(存在重复组合时更稳健)

若同一RAW_ID+ADC_TYPE存在多条记录,可指定聚合函数(如取第一条、均值等):

adc_col_order = df['ADC_TYPE'].unique()

# 分组后拆列,聚合方式选'first'保留首次出现的值
pivoted_df = df.groupby(['RAW_ID', 'ADC_TYPE'])['VALUE'].first()\
               .unstack(fill_value=0)[adc_col_order]\
               .reset_index()

pivoted_df.columns.name = None

关键优化点

  • 避免循环/逐行操作:上述方法均为Pandas底层优化的矢量操作,处理数十万行数据仅需毫秒级时间。
  • 保留原始顺序:通过df['ADC_TYPE'].unique()获取原始列顺序,确保拆分后的列顺序与数据中首次出现的ADC_TYPE一致;RAW_ID的顺序则由原始DataFrame的出现顺序自动保留。
  • 处理缺失值:unstack的fill_value参数可指定缺失值填充值(如0或NaN),适配实际业务场景。

示例输出格式

RAW_IDADC_01ADC_02...ADC_16
1001234567...890
1002123456...789

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:06:18