【发布时间】:2021-10-03 12:20:45
【问题描述】:
在我的数据集中,我在一列中有日期列表,在另一列中有数量。一些日期出现不止一次,代表同一天的不同订单。我想找到每天订购的数量的总和,以便每个日期在日期列中显示一次,在数量列中显示当天购买的商品总数。我目前正在使用 df=df.groupby('Dates')['OrderQuantity'].sum() 函数,但它将找到的第一个总和复制到以下任何数量> 0的行中。这是我的代码:
import pandas as pd
import numpy as np
df=pd.read_excel('stackoverflowexample.xlsx')
df=df.groupby('Dates')['OrderQuantity'].sum()
df.to_csv("materialrows.csv")
df=pd.read_csv("materialrows.csv")
array = np.zeros((11,2))
j=0
for i in df['Dates']:
array[i][0] = i
array[i][1] = df['OrderQuantity'][j]
j+1
for i in range(1,15):
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['OrderQuantity']
print(x)
df=df.groupby('Dates')['OrderQuantity'].sum()
df.to_csv("materialrows.csv")
df=pd.read_csv("materialrows.csv")
array = np.zeros((11,2))
j=0
for i in df['Dates']:
array[i][0] = i
array[i][1] = df['OrderQuantity'][j]
j+1
for i in range(1,15):
if array[i][0] == 0:
array[i][0] = array[i-1][0] + 1
y=pd.DataFrame(data = array, columns = ["Dates","OrderQuantity"])
y=y.iloc[1:, :]
y=y['OrderQuantity']
print(y)
这是“stackoverflowexample”excel文件的样子。
Dates OrderQuantity
1 3
1 4
2 3
3 8
4 1
5 2
6 6
7 1
7 2
7 5
8 1
9 2
10 2
这是我的代码的当前结果:
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
9 7
10 7
这是我想要的结果:
1 7
2 3
3 8
4 1
5 2
6 6
7 8
8 1
9 2
10 2
任何帮助将不胜感激!
【问题讨论】:
-
无法复制;
df.groupby('Dates')['OrderQuantity'].sum()产生正确的结果。 -
你能去掉所有无关的for循环代码并检查你的输入是否被覆盖了吗?
-
这应该是单线解决方案 -
df.groupby('Dates')['OrderQuantity'].sum()产生正确的结果,正如 @ifly6 所说,只需删除不必要的代码 -
与您询问的内容无关,但
j+1行对j没有任何作用。应该是j+=1或j = j + 1
标签: python pandas dataframe numpy group-by