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

使用Pandas转换Playwright爬取的用户组管理员数据格式求助

用Pandas转换管理员表格格式的实现方案

直接上代码和步骤,对应你的需求:

1. 模拟初始数据(替换成你爬取到的DataFrame)

先构造和你爬取结果一致的示例数据,方便你对照:

import pandas as pd

# 你爬取到的初始表格结构:姓名为行,各组为列,"A"表示管理员
raw_data = {
    "姓名": ["张三", "李四", "王五"],
    "市场组": ["A", "", "A"],
    "技术组": ["", "A", "A"],
    "运营组": ["A", "A", ""]
}
df = pd.DataFrame(raw_data)

2. 转换步骤

第一步:将宽表转长表

把原来的列(各组)转成行数据,保留姓名和管理员标记:

# 拆解表格,得到「姓名-组名-是否管理员」的长格式数据
melted_df = df.melt(id_vars="姓名", var_name="组名", value_name="管理员标记")

第二步:筛选管理员记录

只保留标记为"A"的行,去掉无用的标记列:

admin_only = melted_df[melted_df["管理员标记"] == "A"].drop(columns="管理员标记")

第三步:按组聚合管理员姓名

把每个组对应的所有管理员姓名收集起来:

# 按组名分组,将姓名转为列表
grouped_admins = admin_only.groupby("组名")["姓名"].apply(list).reset_index()

第四步:展开列表为多列

把每个组的管理员列表拆分成独立列,列名设为「管理员1」「管理员2」这类:

# 将列表拆分为多列
final_df = pd.DataFrame(grouped_admins["姓名"].tolist(), index=grouped_admins["组名"]).reset_index()
# 重命名列
final_df.columns = ["组名"] + [f"管理员{i+1}" for i in range(final_df.shape[1]-1)]

3. 最终效果

运行后final_df的结构就是你要的:

组名管理员1管理员2
市场组张三王五
技术组李四王五
运营组张三李四

如果某个组的管理员数量少于最大数量,空值会显示NaN,可以用final_df.fillna("")把空值替换成空字符串。

特殊情况处理

如果你的初始数据是把姓名设为索引的(比如爬取后直接用姓名当行索引),先执行df = df.reset_index().rename(columns={"index": "姓名"})把姓名转成普通列再按上面的步骤处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:13:17