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

pandas DataFrame类别名与数据混杂时如何提取分组类别转换结构

解决方案

这里提供两种实现方式,你可以根据数据量大小选择:

方法1:遍历实现(逻辑直观,适合小数据集)

import pandas as pd

# 你的原始数据
df = pd.DataFrame(data={'name':['Category A', 'Subcategory A.A', 'Product A', 'Product B', 'Category B', 'Product C'],'values':["", "", 1,2,"", 3]})

current_categories = []
df['category'] = ''

for idx, row in df.iterrows():
    if row['values'] == '':
        # 识别顶级分类,可根据你实际的类别命名规则调整判断条件
        if row['name'].startswith('Category '):
            current_categories = [row['name']]
        else:
            current_categories.append(row['name'])
    else:
        df.at[idx, 'category'] = ', '.join(current_categories)

# 过滤掉类别行,只保留产品数据
result = df[df['values'] != ''].reset_index(drop=True)
print(result)

方法2:向量化操作(效率更高,适合万行以上的大数据集)

import pandas as pd

df = pd.DataFrame(data={'name':['Category A', 'Subcategory A.A', 'Product A', 'Product B', 'Category B', 'Product C'],'values':["", "", 1,2,"", 3]})

# 标记顶级分类
df['is_top_category'] = (df['values'] == '') & df['name'].str.startswith('Category ')
# 按顶级分类分组
df['group_id'] = df['is_top_category'].cumsum()
# 每组内拼接所有类别名称
df['category'] = df.groupby('group_id')['name'].transform(
    lambda x: ', '.join(x[df.loc[x.index, 'values'] == ''])
)

# 过滤出产品行
result = df[df['values'] != ''][['name', 'values', 'category']].reset_index(drop=True)
print(result)

两种方法运行后得到的result就是你需要的结构:

namevaluescategory
Product A1Category A, Subcategory A.A
Product B2Category A, Subcategory A.A
Product C3Category B

如果你的实际业务中顶级分类不是以Category 开头命名的,调整is_top_category的判断规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:01