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

如何在Pandas可变结构DataFrame中为每个FlexColumn插入前置规则列

解决方案:动态为FlexColumn列前置新增判断列

针对你这个结构可变的DataFrame需求,用Pandas就能轻松搞定,下面是一步步的具体实现:

1. 需求拆解先理清

  • 前两列A、B固定,后续列均以FlexColumn开头,数量不固定
  • 每个FlexColumnX前插入新列FlexColumnX_myEnding
  • 新列值规则:
    • 原列内容包含1/1 → norm
    • 包含0/1 → half
    • 两者都不包含 → not_known

2. 完整代码实现

import pandas as pd
import numpy as np

# 初始化示例DataFrame
data = {
    'A': ['Apples', 'Apples'],
    'B': ['Pears', 'Apples'],
    'FlexColumnA': ['0/1;23;45;67', '0/0;24;26;27'],
    'FlexColumnB': ['1/1;23;45;67', '0/1;27;28;29']
}
df = pd.DataFrame(data)

# 定义常量后缀
my_ending = 'myEnding'

# 筛选所有以FlexColumn开头的列(自动适配后续新增的同规则列)
flex_columns = [col for col in df.columns if col.startswith('FlexColumn')]

# 遍历每个Flex列,插入对应的判断列
for col in flex_columns:
    # 获取当前Flex列在DataFrame中的索引位置,确保新列插在它前面
    insert_position = df.columns.get_loc(col)
    # 生成新列的判断值:优先匹配'1/1',再匹配'0/1',其余归为not_known
    new_col_values = np.where(
        df[col].str.contains('1/1'),
        'norm',
        np.where(df[col].str.contains('0/1'), 'half', 'not_known')
    )
    # 插入新列,动态拼接列名
    df.insert(insert_position, f"{col}_{my_ending}", new_col_values)

# 查看最终结果
print(df)

3. 关键逻辑解释

  • 自动适配可变列:用列表推导式筛选Flex列,不管后续新增多少个同规则列,都能自动处理
  • 精准插入位置:通过get_loc获取列索引,保证新列刚好插在对应Flex列的前面
  • 高效多条件判断:用np.where嵌套实现三层逻辑,比apply更适合批量数据处理,速度更快
  • 动态列名生成:用f-string拼接原列名和后缀,完全符合命名要求

4. 运行结果

执行后会得到你期望的DataFrame:

A       B FlexColumnA_myEnding       FlexColumnA FlexColumnB_myEnding       FlexColumnB
0  Apples   Pears                  half  0/1;23;45;67                  norm  1/1;23;45;67
1  Apples  Apples              not_known  0/0;24;26;27                  half  0/1;27;28;29

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:41:49