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

基于另一列kV值修改DataFrame列值的技术实现求助

处理DataFrame列值的条件修改方案

核心逻辑梳理

  • 仅在**B列值为"sampletext"且C列原值不是"generation"**时,才对C列进行修改
  • 从A列提取kV对应的数字(忽略其他数字):使用正则(\d+)(\s|.)((?i:kv))捕获数字部分
  • 提取到的数值判断规则:
    • 数值≥110 → C列改为Transmission
    • 数值<110 或 无有效数值 → C列改为Distribution

代码实现

import pandas as pd
import numpy as np

# 示例输入数据
df = pd.DataFrame({
    'A': ['220kV变电站', '10kv线路', '35. Kv设备', '500伏变压器', 'sample 110KV', '无kV标识'],
    'B': ['sampletext', 'sampletext', 'sampletext', 'sampletext', 'othertext', 'sampletext'],
    'C': ['generation', 'Distribution', 'Transmission', 'generation', 'Distribution', 'Transmission']
})

# 步骤1:从A列提取kV对应的数值,转为数字类型,无匹配则为NaN
df['kv_num'] = df['A'].str.extract(r'(\d+)(?:\s|\.)(?i:kv)', expand=False).astype(float)

# 步骤2:定义修改C列的条件和对应值
conditions = [
    # 条件1:B是sampletext,C不是generation,且kv_num≥110
    (df['B'] == 'sampletext') & (df['C'] != 'generation') & (df['kv_num'] >= 110),
    # 条件2:B是sampletext,C不是generation,且kv_num<110 或 无有效数值
    (df['B'] == 'sampletext') & (df['C'] != 'generation') & ((df['kv_num'] < 110) | pd.isna(df['kv_num']))
]
choices = ['Transmission', 'Distribution']

# 步骤3:应用条件修改C列,不满足条件则保留原值
df['C'] = np.select(conditions, choices, default=df['C'])

# 可选:删除临时列kv_num
df = df.drop('kv_num', axis=1)

print(df)

示例输出

A          B             C
0     220kV变电站  sampletext    generation
1      10kv线路  sampletext  Distribution
2    35. Kv设备  sampletext  Distribution
3   500伏变压器  sampletext    generation
4  sample 110KV   othertext  Distribution
5      无kV标识  sampletext  Distribution

关键说明

  • 正则表达式简化:原正则调整为r'(\d+)(?:\s|\.)(?i:kv)',用非捕获组减少冗余分组,不影响数字提取
  • astype(float)将提取的字符串转为数值类型,确保后续比较逻辑生效
  • np.select清晰处理多条件分支,default参数直接保留原有值,完美覆盖"generation不修改"的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:10:27