如何对含重复项的CSV透视表求和并保留时间行,GROUPBY SUM不生效
CSV透视表维度聚合求和实现方案
- 首先排查GROUPBY SUM失效的核心原因
- 维度列存在隐形不匹配问题:
pct_type、第二列(时间/属性列)的同值条目带有前后空格、零宽字符、不可见换行符,被判定为不同分组 - 数值列类型错误:数值列存储为字符串格式,聚合时无法执行求和运算
- 分组键遗漏:仅按
pct_type单维度分组,未纳入需要保留的第二列(时间/属性)作为分组依据
- 维度列存在隐形不匹配问题:
- 分场景可直接复用的实现代码
场景1:Pandas处理本地CSV
import pandas as pd # 读取CSV文件 df = pd.read_csv("你的CSV文件路径") # 清洗所有字符串类型维度列,去除隐形空格 for col in ["pct_type", "你的第二列列名(如时间列time)"]: df[col] = df[col].astype(str).str.strip() # 转换所有数值列为可计算类型,空值补0 value_cols = [c for c in df.columns if c not in ["pct_type", "你的第二列列名(如时间列time)"]] df[value_cols] = df[value_cols].apply(pd.to_numeric, errors="coerce").fillna(0) # 按两个维度分组求和,保留所有需要的行/列 aggregated_result = df.groupby(["pct_type", "你的第二列列名(如时间列time)"], as_index=False)[value_cols].sum()场景2:SQL查询入库的CSV数据
SELECT TRIM(pct_type) AS pct_type, TRIM(time) AS time, -- 替换为你的第二列实际列名 SUM(CAST(value_col1 AS DECIMAL(18,4))) AS value_col1, SUM(CAST(value_col2 AS DECIMAL(18,4))) AS value_col2 -- 按需扩展所有数值列 FROM 你的数据表名 GROUP BY TRIM(pct_type), TRIM(time)场景3:Excel Power Query可视化操作
- 导入CSV数据后,选中两个维度列,点击「转换」选项卡→「格式」→「修剪」,去除前后多余空格
- 选中所有数值列,点击「转换」选项卡→「数据类型」→「小数」,转为可计算数值格式
- 点击「转换」选项卡→「分组依据」,选择「高级」模式,添加两个维度列作为分组键,所有数值列的聚合操作选择「求和」
- 结果校验方法
运行后先检查pct_type唯一值数量是否为6,第二列同时间/同属性值无重复条目,对应数值和符合预期即可。
内容的提问来源于stack exchange,提问作者NBC
相关产品推荐
相关产品推荐

