如何用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
相关产品推荐
相关产品推荐

