CSV文件解析列值处理结果不符预期,求技术解决方案
修正CSV解析与数据聚合的问题
问题分析
原代码的核心错误在于:
- 将
size_gb纳入分组索引,导致同表下不同size_gb的记录被强制拆分,无法实现多个partition合并的需求 - 聚合逻辑不符合预期,错误地对每个独立的size_gb值求和,而非按表分组累加合并partition
修正后的代码
import pandas as pd import numpy as np # 读取CSV数据 df = pd.read_csv("F:\\sales_data.csv", header=0) # 定义分组处理函数:累加size_gb,达到阈值则合并partition def process_group(group): rows = [] current_sum = 0 current_partitions = [] for _, row in group.iterrows(): current_sum += row['size_gb'] current_partitions.append(str(row['partition'])) # 累计和达到10时生成合并记录 if current_sum >= 10: rows.append({ 'priority': row['priority'], 'db_name': row['db_name'], 'tbl_name': row['tbl_name'], 'partition': ';'.join(current_partitions), 'sum_gb': current_sum }) current_sum = 0 current_partitions = [] # 处理剩余未达阈值的记录 if current_sum > 0: rows.append({ 'priority': group['priority'].iloc[0], 'db_name': group['db_name'].iloc[0], 'tbl_name': group['tbl_name'].iloc[0], 'partition': ';'.join(current_partitions), 'sum_gb': current_sum }) return pd.DataFrame(rows) # 按优先级、库名、表名分组处理数据 processed_df = df.groupby(['priority', 'db_name', 'tbl_name'], group_keys=False).apply(process_group) # 根据sum_gb计算t_size processed_df['t_size'] = np.where(processed_df['sum_gb'] >= 10, 'XL', np.where(processed_df['sum_gb'] < 3, 'S', 'M')) # 整理输出列顺序 result_df = processed_df[['priority', 'db_name', 'tbl_name', 'partition', 't_size']] print(result_df)
修正说明
- 分组逻辑调整:仅按
priority、db_name、tbl_name分组,确保同表的所有partition被统一处理 - 自定义聚合逻辑:通过遍历组内记录累加size_gb,当累计值≥10时合并对应partition并生成记录,同时处理剩余未达阈值的记录
- t_size计算:严格按照预期规则(≥10→XL,<3→S,其余→M)生成分类标签
- 列结构匹配:最终输出列顺序与预期完全一致
内容的提问来源于stack exchange,提问作者Alex_python
相关产品推荐
相关产品推荐

