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

如何按自定义规则批量编码DataFrame中的因子水平为数字

批量将DataFrame双因子水平编码为数字

问题描述

现有Pandas DataFrame,每列仅包含两个来自{"AA", "GG", "CC", "TT"}的因子水平,需按以下规则批量将因子编码为2或0:

  • 若列是AA/CC组合:AA→2,CC→0
  • 若列是CC/TT组合:CC→2,TT→0
  • 其他组合遵循优先级高的因子编码为2,低的为0的规则(优先级顺序:AA > CC > GG > TT)

原数据示例:

x1xx2xx3xx4xx5xx6x
1TTGGAAGGAAGG
2CCAACCGGTTCC
3CCGGCCGGAAGG
4TTAACCGGTTCC
5CCAACCTTAAGG
6TTGGAATTAACC

期望输出:

x1xx2xx3xx4xx5xx6x
1002220
2220202
3200220
4020202
5220020
6002022

解决方案

利用Pandas的批量列操作实现高效处理,无需逐列手动编码:

步骤1:导入依赖并构造示例数据

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据)
data = {
    'x1x': ['TT', 'CC', 'CC', 'TT', 'CC', 'TT'],
    'x2x': ['GG', 'AA', 'GG', 'AA', 'AA', 'GG'],
    'x3x': ['AA', 'CC', 'CC', 'CC', 'CC', 'AA'],
    'x4x': ['GG', 'GG', 'GG', 'GG', 'TT', 'TT'],
    'x5x': ['AA', 'TT', 'AA', 'TT', 'AA', 'AA'],
    'x6x': ['GG', 'CC', 'GG', 'CC', 'GG', 'CC']
}
df = pd.DataFrame(data)

步骤2:定义编码逻辑并批量处理

# 定义因子优先级:优先级越高,编码越可能为2
priority_map = {'AA': 3, 'CC': 2, 'GG': 1, 'TT': 0}

def encode_single_column(col):
    # 获取当前列的两个唯一因子
    unique_values = col.unique()
    # 对比两个因子的优先级
    val1_priority = priority_map[unique_values[0]]
    val2_priority = priority_map[unique_values[1]]
    
    # 生成映射规则:优先级高的对应2,低的对应0
    if val1_priority > val2_priority:
        code_map = {unique_values[0]: 2, unique_values[1]: 0}
    else:
        code_map = {unique_values[1]: 2, unique_values[0]: 0}
    
    return col.map(code_map)

# 对所有列应用编码函数,生成结果DataFrame
encoded_df = df.apply(encode_single_column)

# 查看结果
print(encoded_df)

说明

  • 该方法通过apply批量处理所有列,避免手动循环,处理大数据量时效率更高
  • 优先级映射可灵活调整,若后续规则变化,仅需修改priority_map即可
  • 自动适配每列的因子组合,无需提前指定列的组合类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31