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

如何将pandas Series中的值按分类拆分为字典或DataFrame?

实现思路

因为不能通过字符串规则模糊匹配分类项,我们可以基于已知的分类项列表或者分类项位置标记,给每个子元素关联所属分类,最终可输出字典或宽表DataFrame满足访问需求。

步骤1:构造测试Series(你可以跳过这步直接替换为自己的Series)

import pandas as pd
# 构造示例Series
s = pd.Series([
    'ITEM1', 'Element1', 'Element2', 'Element3', 'Element4', 'Element5', 'Element6', 'Element7',
    'ITEM2', 'Element8', 'ELEMENT9', 'ELEMENT10', 'Element11', 'Element12', 'Element13', 'Element14',
    'Element2', 'Element24', 'Element25', 'Element26', 'ITEM3', 'Element28'
], name='Items')
# 预先定义已知的分类项列表(实际业务中直接替换为你的分类项即可)
categories = ['ITEM1', 'ITEM2', 'ITEM3']

步骤2:标记每个元素所属的分类

# 标记当前行是否为分类项,如果分类项位置已知也可以直接通过索引标记:is_category = s.index.isin([0,8,20])
is_category = s.isin(categories)
# 给每个分组打标记,同一个分类下的所有元素标记值相同
group_label = is_category.cumsum()
# 生成每个组对应的分类名映射
group_map = s[is_category].reset_index(drop=True).to_dict()
# 给所有元素添加所属分类列
df = s.to_frame()
df['group'] = group_label.map(group_map)
# 过滤掉分类项本身,只保留子元素
child_df = df[~is_category].reset_index(drop=True)

步骤3:转换为你需要的格式

方案1:输出字典,通过键访问对应子元素

result_dict = child_df.groupby('group')['Items'].apply(list).to_dict()
# 访问示例:result_dict['ITEM1'] 即可返回 ['Element1', 'Element2', ..., 'Element7']

方案2:输出宽表DataFrame,通过列名访问对应子元素

result_df = child_df.groupby(['group', child_df.groupby('group').cumcount()])['Items'].first().unstack(0)
# 访问示例:result_df['ITEM1'] 即可返回ITEM1分类下的所有子元素,短分组对应列自动填充NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:18:04