如何动态向DataFrame添加列并按命名规则归类放置
自动排序DataFrame列:按前缀分组并追加新增列
核心思路
把列分为两类处理:
- 无数字后缀的独立列(如
rma_number、serial_number),保留原有顺序 - 带数字后缀的组列(如
Conclusion_1、owner_6),按前缀分组后,每组内按数字编号升序排列,新增列会自动归到对应组的末尾
实现代码
import pandas as pd import re # 模拟你的DataFrame(实际替换成你的数据即可) data = { 'serial_number': ['SN001', 'SN002'], 'rma_number': ['RMA001', 'RMA002'], 'owner_6': ['Alice', 'Bob'], 'Conclusion_2': ['Pass', 'Fail'], 'owner_1': ['Charlie', 'Dave'], 'Conclusion_8': ['OK', 'NOK'], # 新增列示例 'owner_7': ['Eve', 'Frank'], 'date_of_completion_7': ['2024-05-01', '2024-05-02'] } df = pd.DataFrame(data) # 正则匹配前缀_数字格式的列 col_pattern = re.compile(r'^(.*)_(\d+)$') # 拆分列到独立列和分组列字典 independent_cols = [] grouped_cols_dict = {} for col_name in df.columns: match_result = col_pattern.match(col_name) if match_result: col_prefix = match_result.group(1) col_num = int(match_result.group(2)) # 初始化分组列表 if col_prefix not in grouped_cols_dict: grouped_cols_dict[col_prefix] = [] grouped_cols_dict[col_prefix].append((col_num, col_name)) else: independent_cols.append(col_name) # 对每个分组内的列按数字编号排序 sorted_group_cols = [] for prefix in grouped_cols_dict: # 按编号升序排列,提取列名 sorted_cols = [col for num, col in sorted(grouped_cols_dict[prefix], key=lambda x: x[0])] sorted_group_cols.extend(sorted_cols) # 合并最终列顺序:独立列 + 排好序的分组列 final_col_order = independent_cols + sorted_group_cols # 应用新列顺序 sorted_df = df[final_col_order] # 验证结果 print("排序后的列顺序:") print(sorted_df.columns.tolist())
代码说明
- 正则匹配:
^(.*)_(\d+)$能正确识别多下划线前缀(比如date_of_completion_7会提取前缀date_of_completion,编号7),如果你的列用其他分隔符(如-),直接修改正则里的_即可 - 分组排序:每个前缀组内按数字编号升序排列,确保新增的
owner_7自动跟在owner_6后面,date_of_completion_7会单独成组(如果后续新增date_of_completion_8,也会自动追加到该组末尾) - 灵活调整:如果需要固定独立列的顺序,直接修改
independent_cols为指定列表即可,比如independent_cols = ['rma_number', 'serial_number']
内容的提问来源于stack exchange,提问作者vidathri
相关产品推荐
相关产品推荐

