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

如何在Pandas DataFrame字符串列中提取最高占比人员信息?

解决方案:从Pandas字符串列提取占比最高的人员信息

假设你的name_percentage列格式类似"张三:30%,李四:50%,王五:20%",可以通过自定义处理函数+批量apply解决问题,具体步骤如下:

1. 构造示例数据集

先模拟你提到的数据集:

import pandas as pd

data = {
    "id": [1, 2, 3],
    "name_percentage": [
        "张三:30%,李四:50%,王五:20%",
        "赵六:45%,孙七:55%",
        "周八:10%,吴九:60%,郑十:30%"
    ]
}
df = pd.DataFrame(data)

2. 定义单条字符串处理函数

这个函数负责拆分字符串、提取姓名与占比数值,最终返回占比最高的条目:

def extract_top_person(s):
    # 分割成单个人员的占比条目
    items = s.split(",")
    person_info = []
    for item in items:
        # 拆分姓名和占比字符串
        name, pct_str = item.split(":")
        # 去除百分号并转换为数值类型
        pct = float(pct_str.replace("%", ""))
        person_info.append((name, pct))
    # 按占比降序排序,取第一个结果
    person_info.sort(key=lambda x: x[1], reverse=True)
    return person_info[0] if person_info else (None, None)

3. 批量处理并新增目标列

用apply将函数作用到整个列,再把结果拆分成两列:

# 生成包含姓名和占比的元组列
df["top_person"] = df["name_percentage"].apply(extract_top_person)
# 拆分元组为独立的两列
df[["best_name", "percentage"]] = pd.DataFrame(df["top_person"].tolist(), index=df.index)
# 可选:删除中间生成的临时列
df.drop("top_person", axis=1, inplace=True)

最终结果

处理后的DataFrame会新增best_name和percentage列,展示每行占比最高的人员信息:

id          name_percentage best_name  percentage
0   1  张三:30%,李四:50%,王五:20%        李四        50.0
1   2        赵六:45%,孙七:55%        孙七        55.0
2   3  周八:10%,吴九:60%,郑十:30%        吴九        60.0

补充说明

  • 如果你的name_percentage列格式有变体(比如分隔符不是逗号/冒号),只需调整函数里的split参数即可适配。
  • 若存在多名人员占比相同且均为最高值的情况,当前函数会返回排序后的第一个条目,你可以根据需求修改排序逻辑(比如保留所有最高项)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:23:22