Python中pandas groupby求和结果显示异常问题

我用了这个代码去根据客户名称和产品型号分类。

df.groupby(['客户名称', '产品型号'])['数量'].sum().reset_index.to_excel('res.xlsx')

本来的结果是这样的,

20171207114150

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

20171207114745


Python中pandas groupby求和结果显示异常问题

1 回复

问题分析: pandas的groupby().sum()结果异常通常是因为数据中存在非数值列(如字符串、对象类型)或缺失值处理不当。最常见的情况是分组后某些列被自动排除,导致结果列数少于预期。

解决方案:

  1. 检查数据类型:用df.dtypes确认所有需要求和的列都是数值类型(int, float)
  2. 处理非数值列:要么转换数据类型,要么在求和时指定数值列
  3. 查看完整结果:使用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后明确指定需要求和的列。

回到顶部