Summarize the table as shown by summing up Sales against each month. In a quarter, first 2 months have 4 weeks but 3rd month will have 5 weeks.
📌 Challenge Details and Links
ExcelBI Power Query Challenge Number: 230
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Sum Sales By Month with Power Query
Power Query solution 1 for Sum Sales By Month, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.FromRows(
List.Accumulate(
List.TransformMany(List.Split(Table.ToColumns(Source), 2), List.Zip, (i, _) => _{1} ?? _{0}),
{},
(b, n) =>
let
l = List.Last(b),
f = Byte.From(n is number)
in
List.RemoveLastN(b, f) & {{{n, 0}, {l{0}, l{1} + n}}{f}}
),
{"Month", "Sale"}
)
in
S
Power Query solution 2 for Sum Sales By Month, proposed by Kris Jaganah:
let
A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
B = Table.SelectColumns(A, List.Select(Table.ColumnNames(A), each Text.Contains(_, "Sale"))),
C = Table.AddIndexColumn(B, "Id", 1, 1 / 5.1),
D = Table.TransformColumns(C, {"Id", each Number.IntegerDivide(_, 1)}),
E = Table.UnpivotOtherColumns(D, {"Id"}, "A", "V"),
F = Table.Sort(E, {{"A", 0}, {"Id", 0}}),
G = Table.AddColumn(F, "P", each Text.From([Id]) & [A]),
H = Table.AddColumn(
G,
"Month",
each Text.Start(Date.MonthName((List.PositionOf(List.Distinct(G[P]), [P]) + 1) * 28.5), 3)
),
I = Table.Group(H, {"Month"}, {"Sale", each List.Sum([V])})
in
I
Power Query solution 3 for Sum Sales By Month, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content]
meta [Table = "A1:H17", Header = false],
Skip = Table.Skip(Source),
Group = Table.Group(
Skip,
"Column2",
{
"L",
each [
S = Table.Skip(_, 1),
Tc = Table.ToColumns(S),
Alt = List.Alternate(Tc, 1, 1),
T = List.Transform(Alt, List.Sum),
Fr = Record.FieldValues(_{0}),
Rn = List.RemoveNulls(Fr),
R = List.Zip({Rn, T})
][R]
},
0,
(x, y) => Number.From(y = null)
),
Combine = List.Combine(Group[L]),
Table = Table.FromRows(Combine, {"Month", "Sales"}),
Return = Table.Sort(Table, each Date.From([Month] & "1"))
in
Return
Power Query solution 4 for Sum Sales By Month, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Tbl = Table.Combine(
List.Transform(
List.Split(Table.ToColumns(Source), 2),
each Table.FromColumns(_, {"Month", "A"})
)
),
Sol = Table.Group(
Tbl,
"Month",
{{"Sales", each List.Sum([A])}},
0,
(a, b) => Number.From(not Text.Contains(b, "Week"))
)
in
Sol
Power Query solution 5 for Sum Sales By Month, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
grp = Table.Group(
Fonte,
{"Month"},
{
{
"tab",
each
let
a = List.Transform(List.Split(Table.ToColumns(_), 2), Table.FromColumns),
b = List.Transform(
a,
each Table.FromRows(
List.Zip({{_[Column1]{0}}, {List.Sum(_[Column2])}}),
{"Month", "Sales"}
)
)
in
b
}
},
0,
(a, b) => Number.From(not Text.StartsWith(b[Month], "Week"))
)[tab],
res = Table.Combine(List.Transform(List.Zip(grp), Table.Combine))
in
res
Power Query solution 6 for Sum Sales By Month, proposed by Abdallah Ally:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Transform1 = List.Transform(
Table.ToRows(Source),
each List.Transform(_, (x) => try if Text.Start(x, 1) = "W" then null else x otherwise x)
),
FromRows = Table.FromRows(Transform1, Table.ColumnNames(Source)),
ColsToFill = List.Select(Table.ColumnNames(Source), each Text.Start(_, 1) = "M"),
ToRows = Table.ToRows(Table.FillDown(FromRows, ColsToFill)),
Transform2 = List.Transform(ToRows, each List.Transform(List.Split(_, 2), each {_{0}, _{1}})),
FromRecords = Table.FromRows(List.Combine(Transform2), {"Month", "Sale"}),
Group = Table.Group(FromRecords, "Month", {"Sale", each List.Sum([Sale])}),
Result = Table.Sort(Group, each Date.From("1" & [Month]))
in
Result
Power Query solution 7 for Sum Sales By Month, proposed by Ramiro Ayala Chávez:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
L = List.Transform,
R = List.Range,
a = Table.ToColumns(S),
b = List.Combine(L(List.Alternate(a, 1, 1, 1), each {_{0}} & {_{5}} & {_{10}})),
c = L(List.Alternate(a, 1, 1), List.RemoveNulls),
d = L(c, each {R(_, 0, 4)} & {R(_, 4, 4)} & {R(_, 8)}),
e = List.Combine(L(d, each L(_, List.Sum))),
f = Table.FromColumns({b, e}),
Sol = Table.RenameColumns(
f,
List.Zip({Table.ColumnNames(f), List.FirstN(Table.ColumnNames(S), 2)})
)
in
Sol
Power Query solution 8 for Sum Sales By Month, proposed by Eric Laforce:
let
Source = Excel.CurrentWorkbook(){[Name = "tData230"]}[Content],
Transform = Table.FromRows(
List.Combine(List.Transform(List.Split(Table.ToColumns(Source), 2), List.Zip)),
{"Month", "Sale"}
),
Group = Table.Group(
Transform,
"Month",
{"Sale", each List.Sum([Sale])},
GroupKind.Local,
(p, c) => Number.From(not (Text.StartsWith(c, "Week")))
)
in
Group
Power Query solution 9 for Sum Sales By Month, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
a = Table.FromColumns(
{
List.Combine(List.Alternate(Table.ToColumns(S), 1, 1, 1)),
List.Combine(List.Alternate(Table.ToColumns(S), 1, 1))
},
{"M", "Sales"}
),
b = Table.AddColumn(a, "Month", each if Text.Contains([M], "Week") then null else [M]),
c = Table.FillDown(b, {"Month"}),
d = Table.Group(c, {"Month"}, {{"Sales", each List.Sum([Sales])}})
in
d
Power Query solution 10 for Sum Sales By Month, proposed by Yaroslav Drohomyretskyi:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Zip = List.Zip(
{S[Month] & S[Month2] & S[Month4] & S[Month6], S[Sale] & S[Sale3] & S[Sale5] & S[Sale7]}
),
HSTACK = Table.Transpose(Table.FromColumns(Zip), {"Month", "Sale"}),
Clean = Table.FillDown(
Table.TransformColumns(HSTACK, {{"Month", each if Text.StartsWith(_, "Week") then null else _}}),
{"Month"}
),
Group = Table.Group(Clean, {"Month"}, {{"Sale", each List.Sum([Sale]), type nullable number}})
in
Group
Power Query solution 11 for Sum Sales By Month, proposed by Ahmed Ariem:
let
f1 = (w) =>
[
a = Table.ReplaceValue(
w,
(x) => x,
(x) => x,
(x, y, z) => if Text.Contains(x, "W") then null else x,
Table.ColumnNames(w)
),
b = Table.FillDown(a, {"Month", "Month2", "Month4", "Month6"}),
c = Table.SelectRows(b, each ([Sale] <> null))
][c],
f2 = (x) =>
Table.FromRows(
List.Combine(List.TransformMany(Table.ToRows(x), (w) => List.Split(w, 2), (a, b) => {b})),
{"Month", "Sales"}
),
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Replace = f2(f1(Source)),
Transform = Table.TransformColumnTypes(Replace, {{"Sales", type number}}),
Group = Table.Group(
Transform,
{"Month"},
{{"Sales", each List.Sum([Sales]), type nullable number}}
)
in
Group
Power Query solution 12 for Sum Sales By Month, proposed by Alexandre Garcia:
let
a = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
b = List.Accumulate(List.Split(Table.ColumnNames(a),2), hashtag#table({}, {}),(s,c)=> s & Table.FromRows(Table.ToRows(Table.SelectColumns(a, c)),{"Month","x"})),
c = List.Select(b[Month], each Text.Length(_) = 3),
d = Table.Group(b, "Month", {"Sale", each List.Sum([x]) },0,(x,y)=> Byte.From (List.ContainsAny({y},c)))
in
d
Power Query solution 13 for Sum Sales By Month, proposed by Krzysztof Kominiak:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
ToCols = Table.Combine(
List.Transform(List.Split(Table.ToColumns(Source), 2), each Table.FromColumns(_))
),
Result = Table.Group(
ToCols,
{"Column2"},
{{"Month", each _[Column1]{0}}, {"Sales", each List.Sum(_[Column2])}},
GroupKind.Local,
(p, q) => Number.From(q[Column2] = null)
)[[Month], [Sales]]
in
Result
Power Query solution 14 for Sum Sales By Month, proposed by Francesco Bianchi 🇮🇹:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
ToList = Table.ToColumns(Source),
Zip = List.Combine(List.Transform(List.Split(ToList, 2), each List.Zip({_{0}, _{1}}))),
ToTable = Table.FromRows(Zip, {"Months", "Sale"}),
FillDownMonth = Table.AddColumn(ToTable, "Month", each if [Sale] = null then [Months] else null),
FilledDown = Table.FillDown(FillDownMonth, {"Month"}),
Result = Table.Group(
FilledDown,
{"Month"},
{{"Sale", each List.Sum([Sale]), type nullable number}}
)
in
Result
Power Query solution 15 for Sum Sales By Month, proposed by Gertjan Davies:
let
Source = Problem,
T2C = Table.ToColumns(Source),
MonthParts = List.Combine(List.Alternate(T2C, 1, 1, 1)),
ValueParts = List.Combine(List.Alternate(T2C, 1, 1)),
FromRows = Table.FromRows(List.Zip({MonthParts, ValueParts})),
MonthColumn = Table.AddColumn(
FromRows,
"Month",
each if not Text.StartsWith([Column1], "Week") then [Column1] else null,
type text
),
Fill = Table.FillDown(MonthColumn, {"Month"}),
Group = Table.Group(Fill, {"Month"}, {{"Sale", each List.Sum([Column2]), type nullable number}})
in
Group
Solving the challenge of Sum Sales By Month with Excel
Excel solution 1 for Sum Sales By Month, proposed by Bo Rydobon 🇹🇭:
=LET(x,
SCAN(
,
TOCOL(
A2:H17,
,
1
),
LAMBDA(
a,
v,
IF(
v<"w",
v,
a
)
)
),
m,
FILTER(
x,
x>""
),
DROP(GROUPBY(HSTACK(--(1&m),
m),
FILTER(
x,
x<=""
),
SUM,
,
0),
,
1))
Excel solution 2 for Sum Sales By Month, proposed by Rick Rothstein:
=HSTACK(TEXT(28*SEQUENCE(12),"mmm"),BYROW(WRAPROWS(TOCOL(CHOOSECOLS(B3:H17,1,3,5,7),,1),5),SUM))
Excel solution 3 for Sum Sales By Month, proposed by Julian Poeltl:
=LET(
T,
A2:H17,
G,
GROUPBY(
SCAN(
,
TOCOL(
CHOOSECOLS(
T,
SEQUENCE(
4,
,
,
2
)
),
,
1
),
LAMBDA(
A,
B,
IF(
LEFT(
B
)<>"W",
B,
A
)
)
),
TOCOL(
CHOOSECOLS(
T,
SEQUENCE(
4,
,
2,
2
)
),
,
1
),
SUM,
,
0,
1
),
SORTBY(
G,
MONTH(
1&TAKE(
G,
,
1
)
)
)
)
Excel solution 4 for Sum Sales By Month, proposed by Oscar Mendez Roca Farell:
=LET(
d,
A2:H17,
s,
SCAN(
,
TOCOL(
IFS(
d>"A",
d
),
2,
1
),
LAMBDA(
i,
x,
IF(
LEN(
x
)>3,
i,
x
)
)
),
DROP(
GROUPBY(
HSTACK(
MONTH(
s&1
),
s
),
TOCOL(
--d,
2,
1
),
SUM,
,
0
),
,
1
)
)
Excel solution 5 for Sum Sales By Month, proposed by Duy Tùng:
=LET(v,
A2:H17,
a,
WRAPROWS(
TOCOL(
v
),
2
),
b,
UNIQUE(
SORT(
FILTER(
TAKE(
a,
,
1
),
TAKE(
a,
,
-1
)=0
)
)
),
HSTACK(b,
MAP(b,
LAMBDA(x,
SUM(OFFSET(A1,
SUM((v=x)*ROW(
v
)),
SUM((v=x)*COLUMN(
v
)),
5))))))
Excel solution 6 for Sum Sales By Month, proposed by Sunny Baggu:
=LET(
_a,
TOCOL(
FILTER(
A2:H17,
B2:B17 = ""
),
3,
1
),
_b,
TOCOL(
FILTER(
SCAN(
"",
A2:H17,
LAMBDA(
a,
v,
IF(
v = "",
a,
v
)
)
),
A2:H2 = ""
),
,
1
),
_c,
SCAN(
"",
IF(
ISTEXT(
_b
),
_b,
""
),
LAMBDA(
x,
y,
IF(
y = "",
x,
y
)
)
),
HSTACK(_a,
MAP(_a,
LAMBDA(a,
& SUM(TOCOL((_c = a) * _b,
3)))))
)
Excel solution 7 for Sum Sales By Month, proposed by LEONARD OCHEA 🇷🇴:
=LET(t,
A2:H17,
F,
LAMBDA(
[x],
TOCOL(
CHOOSECOLS(
t,
2*SEQUENCE(
COLUMNS(
t
)/2
)-1+x
),
,
1
)
),
i,
F(
1
),
m,
SCAN(
,
IF(
i,
i,
F()
),
LAMBDA(
a,
b,
IF(
ISNUMBER(
b
),
a,
b
)
)
),
DROP(GROUPBY(HSTACK(--(1&m),
m),
i,
SUM,
,
0),
,
1))
Excel solution 8 for Sum Sales By Month, proposed by Md. Zohurul Islam:
=LET(
a,
VSTACK(
A2:B17,
C2:D17,
E2:F17,
G2:H17
),
b,
TAKE(
a,
,
1
),
c,
TAKE(
a,
,
-1
),
d,
SCAN(
c,
b,
LAMBDA(
x,
y,
IF(
y=0,
x,
y
)
)
),
e,
SCAN(
,
d,
LAMBDA(
x,
y,
IF(
LEFT(
y
)="W",
0,
y
)
)
),
f,
SCAN(
,
e,
LAMBDA(
x,
y,
IF(
y=0,
x,
y
)
)
),
g,
UNIQUE(
f
),
h,
SEQUENCE(
COUNTA(
g
)
),
j,
XLOOKUP(
f,
g,
h
),
k,
HSTACK(
j,
f
),
m,
GROUPBY(
k,
c,
SUM,
0,
0
),
rng,
DROP(
m,
,
1
),
header,
{"Month",
"Sale"},
Result,
VSTACK(
header,
rng
),
Result
)
Excel solution 9 for Sum Sales By Month, proposed by Pieter de B.:
=LET(x,
LAMBDA(
y,
TOCOL(
IFS(
B2:H17,
y
),
2,
1
)
),
y,
x(
A2:G17
),
z,
GROUPBY(SCAN(0,
RIGHT(
y
),
LAMBDA(a,
b,
a+(b="1"))),
x(
B2:H17
),
SUM,
,
0),
HSTACK(
TEXT(
TAKE(
z,
,
1
)&-1,
"mmm"
),
DROP(
z,
,
1
)
))
Excel solution 10 for Sum Sales By Month, proposed by Hamidi Hamid:
=LET(
n,
TOCOL(
TRANSPOSE(
CHOOSECOLS(
A2:H17,
SEQUENCE(
,
4,
2,
2
)
)*1
)
),
w,
TOCOL(
WRAPCOLS(
TOROW(
CHOOSECOLS(
CHOOSEROWS(
A2:H17,
SEQUENCE(
3,
,
1,
5
)
),
SEQUENCE(
,
4,
1,
2
)
)
),
4
)
),
t,
XLOOKUP(
CHOOSECOLS(
A2:H17,
SEQUENCE(
,
4,
1,
2
)
),
w,
w,
""
),
d,
TOCOL(
TRANSPOSE(
t
)
),
g,
SCAN(
,
d,
LAMBDA(
a,
b,
IF(
b<>"",
b,
a
)
)
),
cc,
MAP(
UNIQUE(
g
),
LAMBDA(
a,
SUM(
FILTER(
HSTACK(
g,
n
),
TAKE(
HSTACK(
g,
n
),
,
1
)=a,
)
)
)
),
HSTACK(
UNIQUE(
g
),
cc
)
)
Excel solution 11 for Sum Sales By Month, proposed by ferhat CK:
=LET(
a,
VSTACK(
A2:B17,
C2:D17,
E2:F17,
G2:H17
),
b,
SCAN(
"",
TAKE(
a,
,
1
),
LAMBDA(
x,
y,
IF(
LEN(
y
)=3,
y,
x
)
)
),
c,
GROUPBY(
b,
TAKE(
a,
,
-1
),
SUM,
,
0
),
SORTBY(
c,
DATEVALUE(
TAKE(
c,
,
1
)&"1"
),
1
)
)
Excel solution 12 for Sum Sales By Month, proposed by Jaroslaw Kujawa:
=LET(b ;
REDUCE(0 ;
LET(z ;
A2:H17 ;
v ;
TOCOL(
IF(
ISBLANK(
z
) ;
"" ;
z
) ;
;
1
) ;
FILTER(v ;
(v="")+ISNUMBER(
v
))) ;
LAMBDA(
a ;
x ;
IF(
""<>x ;
a+x ;
VSTACK(
a ;
0
)
)
)) ;
seq ;
SEQUENCE(
ROWS(
b
)
) ;
HSTACK(
TEXT(
"1/"&DROP(
seq ;
-1
) ;
"MMM"
) ;
DROP(
IFERROR(
INDEX(
b ;
seq
)-INDEX(
b ;
seq+1
) ;
INDEX(
b ;
seq
)
) ;
1
)
))
Excel solution 13 for Sum Sales By Month, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(
x,
TOCOL(
TRANSPOSE(
IF(
LEN(
A2:H17
)=3*NOT(
ISNUMBER(
A2:H17
)
),
A2:H17,
""
)
)
),
HSTACK(
FILTER(
x,
x<>""
),
MAP(
SEQUENCE(
COUNTA(
FILTER(
x,
x<>""
)
)
),
LAMBDA(
a,
SUM(
IF(
a=LET(
j,
IF(
LEN(
A2:A17
)=3,
1,
0
),
LET(
i,
IF(
j=0,
SCAN(
0,
j,
LAMBDA(
a,
b,
a+b
)
),
0
),
HSTACK(
i,
IF(
i=0,
0,
i+{3,
6,
9}
)
)
)
),
CHOOSECOLS(
IF(
ISNUMBER(
A2:H17
),
A2:H17,
0
),
{2,
4,
6,
8}
),
0
)
)
)
)
)
)
Excel solution 14 for Sum Sales By Month, proposed by Imam Hambali:
=LET(
a,
LAMBDA(
x,
TOCOL(
CHOOSECOLS(
A2:H17,
SEQUENCE(
,
COLUMNS(
A2:H17
)/2,
x,
2
)
),
,
TRUE
)
),
b,
HSTACK(
SCAN(
"",
IF(
LEFT(
a(
1
)
)<>"W",
a(
1
)
),
LAMBDA(
x,
y,
IF(
y=FALSE,
x,
y
)
)
),
a(
2
)
),
c,
GROUPBY(
CHOOSECOLS(
b,
1
),
CHOOSECOLS(
b,
2
),
SUM,
0,
0
),
SORTBY(
c,
DATEVALUE(
CHOOSECOLS(
c,
1
)&"1"
)
)
)
Excel solution 15 for Sum Sales By Month, proposed by Peter Bartholomew:
= LET(
week,
TOCOL(
FILTER(
source,
header="Month"
),
,
1
),
sale,
TOCOL(
FILTER(
source,
header="Sale"
),
,
TRUE
),
month,
SCAN(
0,
week,
LAMBDA(
acc,
w,
IF(
LEFT(
w,
4
)<>"week",
acc+1,
acc
)
)
),
GROUPBY(
month,
sale,
SUM,
,
0
)
)
Excel solution 16 for Sum Sales By Month, proposed by Luis Enrique Charca Ponce:
=LET(
raw,
A2:H17,
periods,
SCAN(
"",
TOCOL(
CHOOSECOLS(
raw,
SEQUENCE(
4,
,
1,
2
)
),
,
TRUE
),
LAMBDA(
a,
v,
IF(
LEFT(
v,
4
)="Week",
a,
v
)
)
),
amounts,
TOCOL(
CHOOSECOLS(
raw,
SEQUENCE(
4,
,
2,
2
)
),
,
TRUE
),
total,
GROUPBY(
periods,
amounts,
SUM,
,
0
),
months,
UNIQUE(
periods
),
HSTACK(
months,
VLOOKUP(
months,
total,
2,
FALSE
)
)
)
Solving the challenge of Sum Sales By Month with Python
Python solution 1 for Sum Sales By Month, proposed by Konrad Gryczan, PhD:
import pandas as pd
import numpy as np
path = "PQ_Challenge_230.xlsx"
input = pd.read_excel(path, usecols="A:H", nrows=17).rename(columns=lambda x: x.split('.')[0])
test = pd.read_excel(path, usecols="J:K", nrows=12).rename(columns=lambda x: x.split('.')[0])
splits = [input.iloc[:, i:i+2] for i in range(0, input.shape[1], 2)]
df = pd.concat(splits, axis=0, ignore_index=True)
df['Week'] = df['Month']
df['Month'] = df.apply(lambda row: row['Week'] if pd.isna(row['Sale']) else np.NaN, axis=1)
df['Month'] = df['Month'].ffill()
summary = df.groupby('Month', as_index=False)['Sale'].sum()
check = test.merge(summary, on='Month', how='left')
check['Check'] = check['Sale_x'] == check['Sale_y']
print(all(check['Check'])) # True
Solving the challenge of Sum Sales By Month with Python in Excel
Python in Excel solution 1 for Sum Sales By Month, proposed by Alejandro Campos:
months = ['Jan'] * 4 + ['Feb'] * 4 + ['Mar'] * 5 +
['Apr'] * 4 + ['May'] * 4 + ['Jun'] * 5 +
['Jul'] * 4 + ['Aug'] * 4 + ['Sep'] * 5 +
['Oct'] * 4 + ['Nov'] * 4 + ['Dec'] * 5
weeks = ['Week1', 'Week2', 'Week3', 'Week4'] * 3 + ['Week5'] +
['Week1', 'Week2', 'Week3', 'Week4'] * 3 + ['Week5'] +
['Week1', 'Week2', 'Week3', 'Week4'] * 3 + ['Week5'] +
['Week1', 'Week2', 'Week3', 'Week4'] * 3 + ['Week5']
sales = [
]
df_table = pd.DataFrame({
'Months': months,
'Weeks': weeks,
'Sales': sales
})
df_table["Months"] = pd.Categorical(df_table["Months"], categories=[
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
], ordered=True)
monthly_sales_summary = df_table.groupby("Months")["Sales"].sum().reset_index()
monthly_sales_summary
Solving the challenge of Sum Sales By Month with R
R solution 1 for Sum Sales By Month, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Power Query/PQ_Challenge_230.xlsx"
input = read_excel(path, range = "A1:H17")
test = read_excel(path, range = "J1:K13")
df = input %>%
split.default(., ceiling(seq_along(.) / 2)) %>%
map_dfr(~ .x, .id = NULL) %>%
mutate(Week = Month) %>%
mutate(Month = ifelse(is.na(Sale), Week, NA_character_)) %>%
fill(Month) %>%
summarise(Sale = sum(Sale, na.rm = TRUE), .by = Month)
all.equal(df, test, check.attributes = FALSE)
#> [1] TRUE
&&
