【问题标题】:df=df.groupby('Dates')['OrderQuantity'].sum() errordf=df.groupby('Date')['Order Quantity'].sum() 错误
【发布时间】: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+=1j = j + 1

标签: python pandas dataframe numpy group-by


【解决方案1】:

这个df=df.groupby('Dates')['OrderQuantity'].sum() 返回一个系列。 添加 as_index=False 字段将返回一个 DF -->

df = df.groupby('Dates',as_index=False)['OrderQuantity'].sum().

尝试重新运行笔记本中的单元格。

【讨论】:

  • 问题与返回系列或数据框无关,它与 group by 创建的值有关。
猜你喜欢
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2013-12-01
  • 1970-01-01
  • 2020-10-10
  • 2022-11-16
相关资源
最近更新 更多