【问题标题】:Data Aggregation in Excel/Python/R [duplicate]Excel / Python / R中的数据聚合[重复]
【发布时间】:2020-11-21 15:04:11
【问题描述】:

我有以下格式的数据:

Date(dmy)  | Area   | Item_ID | Quantity
01-04-2016 | 201002 | AX      | 10
01-04-2016 | 560001 | ML      | 7
05-04-2016 | 201002 | AX      | 3
10-04-2016 | 201002 | WAP     | 16
30-04-2016 | 560001 | XY      | 9
07-05-2016 | 560001 | ML      | 20
10-05-2016 | 201002 | AX      | 1
17-05-2016 | 560001 | AX      | 2
31-05-2016 | 201002 | AX      | 10
.
.
.

我需要按月对 Item_IDs 和 Area 级别进行 Quantity 聚合。 即对于上述数据,所需的汇总输出应如下所示:

Date(monthyear)  | Area   | Item_ID | Quantity
04/2016          | 201002 | AX      | 13
04/2016          | 560001 | ML      | 7
04/2016          | 201002 | WAP     | 16
04/2016          | 560001 | XY      | 9
05/2016          | 560001 | ML      | 20
05/2016          | 201002 | AX      | 11
05/2016          | 560001 | AX      | 2

直觉是:如果(Area 和 Item_ID 对)在同一个月的多行中相同,则进行 Quantity 聚合(求和)。

请帮助我执行此聚合以获取此格式本身的结果。谢谢。

【问题讨论】:

  • 使用数据透视表
  • 库(dplyr); df %>% group_by(month(Date), Area, Item_ID) %>% summarise(quantity=sum(quantity))
  • 谢谢大家的回答。 :) 数据透视表只是按照我的要求工作。我也在 python 中执行了同样的操作:data.groupby(['Year','Month','Area','Item_ID']).sum()[['Quantity']]。

标签: r python-3.x excel data-science aggregation


【解决方案1】:

试试这个base R 解决方案:

#Data
df <- structure(list(Date.dmy. = c("01/04/2016", "01/04/2016", "05/04/2016", 
"10/04/2016", "30/04/2016", "07/05/2016", "10/05/2016", "17/05/2016", 
"31/05/2016"), Area = c(201002L, 560001L, 201002L, 201002L, 560001L, 
560001L, 201002L, 560001L, 201002L), Item_ID = c("AX", "ML", 
"AX", "WAP", "XY", "ML", "AX", "AX", "AX"), Quantity = c(10L, 
7L, 3L, 16L, 9L, 20L, 1L, 2L, 10L)), row.names = c(NA, -9L), class = "data.frame")

#Code
#Format data
df$Date <- format(as.Date(df$Date.dmy.,'%d/%m/%Y'),'%m-%Y')
#Aggregate
AG <- aggregate(Quantity~Date+Area+Item_ID,data=df,sum,na.rm=T)

     Date   Area Item_ID Quantity
1 04-2016 201002      AX       13
2 05-2016 201002      AX       11
3 05-2016 560001      AX        2
4 04-2016 560001      ML        7
5 05-2016 560001      ML       20
6 04-2016 201002     WAP       16
7 04-2016 560001      XY        9

【讨论】:

    【解决方案2】:

    在 R 中使用 tidyverse:

    library(lubridate)
    library(tidyverse)
    df %>%
      group_by(grp=format(dmy(`Date(dmy)`),"%m/%Y"),Area,Item_ID)%>%
      summarise(Quantity = sum(Quantity))
    # A tibble: 7 x 4
    # Groups:   grp, Area [4]
      grp       Area Item_ID Quantity
      <chr>    <int> <chr>      <int>
    1 04/2016 201002 AX            13
    2 04/2016 201002 WAP           16
    3 04/2016 560001 ML             7
    4 04/2016 560001 XY             9
    5 05/2016 201002 AX            11
    6 05/2016 560001 AX             2
    7 05/2016 560001 ML            20
    

    如果使用python,那么:

    import pandas as pd
    df.assign(Date = pd.to_datetime(df.iloc[:,0], dayfirst = True).dt.strftime("%m/%Y")).\
       groupby(['Date','Area','Item_ID']).Quantity.sum().reset_index()
    
        Date    Area    Item_ID Quantity
    0   04/2016 201002  AX  13
    1   04/2016 201002  WAP 16
    2   04/2016 560001  ML  7
    3   04/2016 560001  XY  9
    4   05/2016 201002  AX  11
    5   05/2016 560001  AX  2
    6   05/2016 560001  ML  20
    

    在这两种情况下,您都可以按照自己的方式订购它们

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多