You need to enable JavaScript to run this app. Pandas按Dates列分组求OrderQuantity总和出现值重复问题求解
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按Dates列分组求OrderQuantity总和出现值重复问题求解

问题排查与修复

核心错误原因

  • 循环中计数变量j没有自增赋值:代码中写的j+1只是计算了j加1的结果,但没有赋值回j,导致j始终等于0,每次取的都是第一条求和结果7,所以所有行的订单量都显示为7。
  • 数组索引越界风险:初始化的array形状是(11,2),后续循环用了range(1,15),访问数组下标超过10就会触发越界报错。
  • 冗余操作:分组求和后无需来回写入、读取csv文件,也不需要额外用numpy数组二次处理,pandas本身就能直接完成需求。

最简修复方案(仅修正原有代码的错误部分)

把所有的j+1都改成j += 1,同时调整数组长度和循环范围避免越界:

import pandas as pd
import numpy as np

df=pd.read_excel('stackoverflowexample.xlsx')
# 分组求和时加as_index=False,直接保留Dates为普通列
df=df.groupby('Dates', as_index=False)['OrderQuantity'].sum()

# 到这一步已经得到正确结果,直接打印即可拿到期望输出
print(df.set_index('Dates')['OrderQuantity'])

# 如果一定要保留原有的数组逻辑,修改如下
array = np.zeros((11,2))
j=0
for i in df['Dates']:
    array[i][0] = i
    array[i][1] = df['OrderQuantity'][j]
    # 修正j的自增逻辑
    j += 1

# 调整循环范围避免越界
for i in range(1,11):
    if array[i][0] == 0:
        array[i][0] = array[i-1][0] + 1
    
x=pd.DataFrame(data = array, columns = ["Dates","OrderQuantity"])   
x=x.iloc[1:, :]
x=x.set_index('Dates')['OrderQuantity']
print(x)

最优精简实现

完全不需要额外的数组操作和重复代码,几行即可完成需求:

import pandas as pd

df = pd.read_excel('stackoverflowexample.xlsx')
daily_orders = df.groupby('Dates', as_index=False)['OrderQuantity'].sum()
# 按期望格式输出
print(daily_orders.set_index('Dates')['OrderQuantity'])
# 保存结果到csv
daily_orders.to_csv("materialrows.csv", index=False)

运行后输出结果为:

Dates
1     7
2     3
3     8
4     1
5     2
6     6
7     8
8     1
9     2
10    2
Name: OrderQuantity, dtype: int64

内容的提问来源于stack exchange,提问作者Ashley Stanfield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:48:00