Python中pandas groupby求和结果显示异常问题
我用了这个代码去根据客户名称和产品型号分类。
df.groupby(['客户名称', '产品型号'])['数量'].sum().reset_index.to_excel('res.xlsx')
本来的结果是这样的,

我想要的结果是这样的, 就是不要合并这个单元格, 请问这个怎么设置?

Python中pandas groupby求和结果显示异常问题
1 回复
问题分析:
pandas的groupby().sum()结果异常通常是因为数据中存在非数值列(如字符串、对象类型)或缺失值处理不当。最常见的情况是分组后某些列被自动排除,导致结果列数少于预期。
解决方案:
- 检查数据类型:用
df.dtypes确认所有需要求和的列都是数值类型(int, float) - 处理非数值列:要么转换数据类型,要么在求和时指定数值列
- 查看完整结果:使用
pd.set_option('display.max_columns', None)显示所有列
示例代码:
import pandas as pd
import numpy as np
# 示例数据(包含字符串列)
df = pd.DataFrame({
'group': ['A', 'A', 'B', 'B', 'C'],
'value1': [1, 2, 3, 4, 5],
'value2': [10.5, 20.3, 30.1, 40.7, 50.9],
'category': ['X', 'Y', 'X', 'Y', 'Z'] # 非数值列
})
print("原始数据:")
print(df)
print("\n数据类型:")
print(df.dtypes)
# 错误做法:字符串列会被自动排除
result_bad = df.groupby('group').sum()
print("\n错误结果(缺少category列):")
print(result_bad)
# 正确做法1:只对数值列求和
numeric_cols = df.select_dtypes(include=[np.number]).columns
result_good = df.groupby('group')[numeric_cols].sum()
print("\n正确结果(仅数值列):")
print(result_good)
# 正确做法2:转换数据类型后求和
df['value1'] = pd.to_numeric(df['value1'], errors='coerce')
df['value2'] = pd.to_numeric(df['value2'], errors='coerce')
result_all = df.groupby('group').sum()
print("\n转换类型后结果:")
print(result_all)
关键点:
- pandas的
sum()默认只对数值列操作,非数值列会被静默忽略 - 使用
select_dtypes()或pd.to_numeric()确保数据类型正确 - 如果结果缺少某些列,先检查这些列的数据类型
建议: 始终在groupby后明确指定需要求和的列。

