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
相关产品推荐
相关产品推荐

