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

如何用Pandas修改DataFrame表头并规整分支与类型关联的数据

解决方法

直接通过标记分组行→向前填充分组信息→过滤有效数据→调整列顺序四步完成,代码简洁高效:

import pandas as pd

# 构造原始DataFrame(替换成你实际的数据源)
data = {
    'Coode': ['Barnch1', 'food', '111100016', '111100030', '111100031', 'Barnch2', 'meat', '105000003', '105000009', '111100030'],
    'detial': [pd.NA, pd.NA, 'Vanilla', 'Chocolate', 'Strawberry', pd.NA, pd.NA, 'Sliced ​​Beef', 'Sliced ​​Pork Neck', 'Sliced Pork Loin'],
    'quantity': [pd.NA, pd.NA, 243, 2000, 2000, pd.NA, pd.NA, 2260, 1400, 2000],
    'unit': [pd.NA, pd.NA, 'กรัม', 'กรัม', 'กรัม', pd.NA, pd.NA, 'กรัม', 'กรัม', 'กรัม'],
    'Unnamed: 13': [pd.NA]*10,
    'Crost': [pd.NA, pd.NA, 0, 0, 0, pd.NA, pd.NA, 0, 0, 0],
    'Sum': [pd.NA, pd.NA, 0, 0, 0, pd.NA, pd.NA, 0, 0, 0]
}
df = pd.DataFrame(data)

# 1. 标记并填充分支(Barnch)信息
df['Barnch'] = df['Coode'].where(df['Coode'].str.startswith('Barnch')).ffill()

# 2. 标记并填充类型(type)信息
df['type'] = df['Coode'].where(df['Coode'].isin(['food', 'meat'])).ffill()

# 3. 过滤掉无详情的标题行,保留有效数据
df_clean = df.dropna(subset=['detial']).copy()

# 4. 调整列顺序,匹配目标结构
new_cols = ['Barnch', 'type', 'Coode', 'detial', 'quantity', 'unit', 'Unnamed: 13', 'Crost', 'Sum']
df_clean = df_clean[new_cols].reset_index(drop=True)

print(df_clean)

代码说明

  • where() + ffill():精准识别分支/类型行,然后将分组信息向下填充到所属的所有数据行,这是处理此类分层表格的核心技巧。
  • dropna(subset=['detial']):筛选出真正的业务数据行,剔除仅作分组标识的空行。
  • 列顺序调整:直接指定目标列的排列顺序,确保输出结构完全匹配需求。

运行后得到的结果与你期望的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:42