Skip to main content
Back to problems
#2993
Medium Database

Friday purchases i

Database
80.6% acceptance
Mar 31, 2026
15
4

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# Table: Purchases
# 
# +---------------+------+
# | Column Name   | Type |
# +---------------+------+
# | user_id       | int  |
# | purchase_date | date |
# | amount_spend  | int  |
# +---------------+------+
# (user_id, purchase_date, amount_spend) is the primary key (combination of columns with unique values) for this table.
# purchase_date will range from November 1, 2023, to November 30, 2023, inclusive of both dates.
# Each row contains user id, purchase date, and amount spend.
# 
# Write a solution to calculate the total spending by users on each Friday of every week in November 2023. Output only weeks that include at least one purchase on a Friday.
# 
# Return the result table ordered by week of month in ascending order.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# Purchases table:
# +---------+---------------+--------------+
# | user_id | purchase_date | amount_spend |
# +---------+---------------+--------------+
# | 11      | 2023-11-07    | 1126         |
# | 15      | 2023-11-30    | 7473         |
# | 17      | 2023-11-14    | 2414         |
# | 12      | 2023-11-24    | 9692         |
# | 8       | 2023-11-03    | 5117         |
# | 1       | 2023-11-16    | 5241         |
# | 10      | 2023-11-12    | 8266         |
# | 13      | 2023-11-24    | 12000        |
# +---------+---------------+--------------+
# Output:
# +---------------+---------------+--------------+
# | week_of_month | purchase_date | total_amount |
# +---------------+---------------+--------------+
# | 1             | 2023-11-03    | 5117         |
# | 4             | 2023-11-24    | 21692        |
# +---------------+---------------+--------------+
# Explanation:
# - During the first week of November 2023, transactions amounting to $5,117 occurred on Friday, 2023-11-03.
# - For the second week of November 2023, there were no transactions on Friday, 2023-11-10.
# - Similarly, during the third week of November 2023, there were no transactions on Friday, 2023-11-17.
# - In the fourth week of November 2023, two transactions took place on Friday, 2023-11-24, amounting to $12,000 and $9,692 respectively, summing up to a total of $21,692.
# Output table is ordered by week_of_month in ascending order.

import pandas as pd

def friday_purchases(purchases: pd.DataFrame) -> pd.DataFrame:
  purchases['purchase_date'] = pd.to_datetime(purchases['purchase_date'])
  fridays = purchases[purchases['purchase_date'].dt.dayofweek == 4].copy()
  if fridays.empty:
    return pd.DataFrame(columns=['week_of_month', 'purchase_date', 'total_amount'])
  fridays['week_of_month'] = (fridays['purchase_date'].dt.day - 1) // 7 + 1
  result = fridays.groupby(['week_of_month', 'purchase_date'], as_index=False)['amount_spend'].sum()
  result.columns = ['week_of_month', 'purchase_date', 'total_amount']
  return result.sort_values('week_of_month')