如何在Python pandas DataFrame中按条件将行转换为分类维度列
实现方案
核心逻辑为识别分类合计行后向下填充分类信息,过滤掉合计行后重排列顺序即可,适配子项行数不固定的场景:
import pandas as pd # 原始数据 data = [['FRUIT', 'FRU', 100],['A.GRAPE','A.GRA', 50],['A.APPLE','A.APP', 50], ['VEGETABLE', 'VEG', 75],['A.TOMATO','A.TOM', 25],['A.CABBAGE','A.CAB', 25],['A.CARROT','A.CAR', 25]] df = pd.DataFrame(data, columns = ['name', 'abbrevation', 'value']) # 1. 生成分类行掩码:示例中分类行name不含".",可根据实际数据调整判断规则 mask = ~df['name'].str.contains('\.') # 2. 新增分类相关列,仅分类行有值其余为空 df['category'] = df['name'].where(mask) df['category abbrevation'] = df['abbrevation'].where(mask) # 3. 向下填充分类信息,所有子项自动匹配所属分类 df[['category', 'category abbrevation']] = df[['category', 'category abbrevation']].ffill() # 4. 过滤合计行、重排列顺序得到最终结果 df2 = df[~mask][['category', 'category abbrevation', 'name', 'abbrevation', 'value']].reset_index(drop=True)
输出的df2完全匹配需求的目标格式。如果分类行有其他识别规则(比如固定行号、value为子项合计等),仅需修改第一步mask的生成逻辑即可,其余步骤无需调整。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

