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

Pandas DataFrame字符串字段按自定义规则转数值实现方案

当前处理的DataFrame数据集样例

实现思路

基于pandas做逐行字符串处理即可,三个字段的处理逻辑完全匹配需求:

  • player_positions:字段内多位置以逗号分隔,拆分字符串后对位置值去重,统计元素个数即可得到可胜任位置数,空值统一填充为0
  • work_rate:提前定义等级和数值的映射关系,拆分字段内的两个工作率值,分别匹配映射值后求和即可,兼容斜杠、逗号两种常见分隔符格式
  • player_traits:两种编码方案按需选择:如果后续要做特征加权、正负影响力打分,选-1/1编码;如果是做常规机器学习建模,0/1哑变量编码更适配绝大多数模型的输入要求
代码参考

前置依赖:确保已经安装pandas、numpy,数据集已读取为DataFrame对象df

import pandas as pd
import numpy as np

# 工作率映射字典
work_rate_map = {"Low": 1, "Medium": 2, "High": 3}

# 1. 转换player_positions为可胜任位置计数
df["position_count"] = df["player_positions"].apply(
    lambda x: len(set([pos.strip() for pos in str(x).split(",") if pos.strip()])) if pd.notna(x) else 0
)

# 2. 转换work_rate为映射求和值
def sum_work_rate(val):
    if pd.isna(val):
        return np.nan
    # 统一分隔符为逗号,拆分两个工作率值
    rate_list = [r.strip() for r in str(val).replace("/", ",").split(",") if r.strip()]
    return sum(work_rate_map.get(r, 0) for r in rate_list)

df["work_rate_total"] = df["work_rate"].apply(sum_work_rate)

# 3. 转换player_traits为二值标识,二选一即可
# 方案A:-1/1编码,适合打分类场景
df["injury_prone"] = df["player_traits"].apply(
    lambda x: -1 if pd.notna(x) and "Injury Prone" in str(x) else 1
)

# 方案B:0/1编码,适合机器学习建模场景
# df["injury_prone"] = df["player_traits"].apply(
#     lambda x: 1 if pd.notna(x) and "Injury Prone" in str(x) else 0
# )

处理完成后可抽取T. Barkhuizen所在行校验结果:该条数据position_count应为3,work_rate_total应为5,injury_prone取值和该球员是否带易受伤特质匹配即说明逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:18:22