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

使用Pandas在Python中筛选合并DataFrame:图书归属聚合需求

解决方法

你的核心问题在于没先处理分号分隔的多归属者,直接合并相同DataFrame完全达不到拆分聚合的目的。高效的处理步骤如下:

步骤1:读取数据并拆分归属者

先把用分号分隔的多个归属者拆成单独的行,同时清理可能存在的空格:

from pathlib import Path
import pandas as pd

# 读取原始数据
file1 = Path.cwd() / "./bookgrid.xlsx"
df = pd.read_excel(file1)

# 拆分归属者字符串为列表,同时去除每个名字的前后空格
df['Owner'] = df['Owner'].str.split(';').apply(lambda names: [n.strip() for n in names])
# 把列表拆成单独行,每个归属者对应原图书行
df_exploded = df.explode('Owner')

步骤2:按归属者聚合图书并转成宽格式

将同一归属者的所有图书收集起来,再展开为多列:

# 按归属者分组,把对应的图书整理成列表
grouped = df_exploded.groupby('Owner')['Book'].apply(list).reset_index()

# 把图书列表拆分为多列,列名设为Book_1、Book_2...
book_cols = grouped['Book'].apply(pd.Series).rename(columns=lambda idx: f"Book_{idx+1}")

# 合并归属者列和图书列,得到最终结果
result = pd.concat([grouped['Owner'], book_cols], axis=1)

步骤3:保存结果

# 导出到Excel,不保留索引列
result.to_excel("./results.xlsx", index=False)

效果说明

假设原始数据有如下行:

《Alabama》 | julia;marry
《Python 101》 | julia
《Java Core》 | marry;bob

处理后会生成:

OwnerBook_1Book_2
bobJava CoreNaN
juliaAlabamaPython 101
marryAlabamaJava Core

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:27