-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1693-DailyLeadsandPartners.py
More file actions
69 lines (62 loc) · 3.49 KB
/
1693-DailyLeadsandPartners.py
File metadata and controls
69 lines (62 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 1693. Daily Leads and Partners
# Table: DailySales
# +-------------+---------+
# | Column Name | Type |
# +-------------+---------+
# | date_id | date |
# | make_name | varchar |
# | lead_id | int |
# | partner_id | int |
# +-------------+---------+
# This table does not have a primary key.
# This table contains the date and the name of the product sold and the IDs of the lead and partner it was sold to.
# The name consists of only lowercase English letters.
# Write an SQL query that will, for each date_id and make_name, return the number of distinct lead_id's and distinct partner_id's.
# Return the result table in any order.
# The query result format is in the following example.
# Example 1:
# Input:
# DailySales table:
# +-----------+-----------+---------+------------+
# | date_id | make_name | lead_id | partner_id |
# +-----------+-----------+---------+------------+
# | 2020-12-8 | toyota | 0 | 1 |
# | 2020-12-8 | toyota | 1 | 0 |
# | 2020-12-8 | toyota | 1 | 2 |
# | 2020-12-7 | toyota | 0 | 2 |
# | 2020-12-7 | toyota | 0 | 1 |
# | 2020-12-8 | honda | 1 | 2 |
# | 2020-12-8 | honda | 2 | 1 |
# | 2020-12-7 | honda | 0 | 1 |
# | 2020-12-7 | honda | 1 | 2 |
# | 2020-12-7 | honda | 2 | 1 |
# +-----------+-----------+---------+------------+
# Output:
# +-----------+-----------+--------------+-----------------+
# | date_id | make_name | unique_leads | unique_partners |
# +-----------+-----------+--------------+-----------------+
# | 2020-12-8 | toyota | 2 | 3 |
# | 2020-12-7 | toyota | 1 | 2 |
# | 2020-12-8 | honda | 2 | 2 |
# | 2020-12-7 | honda | 3 | 2 |
# +-----------+-----------+--------------+-----------------+
# Explanation:
# For 2020-12-8, toyota gets leads = [0, 1] and partners = [0, 1, 2] while honda gets leads = [1, 2] and partners = [1, 2].
# For 2020-12-7, toyota gets leads = [0] and partners = [1, 2] while honda gets leads = [0, 1, 2] and partners = [1, 2].
import pandas as pd
def daily_leads_and_partners(daily_sales: pd.DataFrame) -> pd.DataFrame:
# 按 date_id make_name 分组 nunique 类似于 count(distinct xxx)
df = daily_sales.groupby(['date_id','make_name'])[['lead_id','partner_id']].nunique().reset_index()
# print(df)
# 修改名称
return df.rename(columns={'lead_id':'unique_leads','partner_id':'unique_partners'})
# agg
def daily_leads_and_partners1(daily_sales: pd.DataFrame) -> pd.DataFrame:
result = daily_sales.groupby(['date_id', 'make_name']).agg({'lead_id': 'nunique', 'partner_id': 'nunique'}).reset_index()
result.columns = ['date_id', 'make_name', 'unique_leads', 'unique_partners']
return result
if __name__ == "__main__":
data = [['2020-12-8', 'toyota', 0, 1], ['2020-12-8', 'toyota', 1, 0], ['2020-12-8', 'toyota', 1, 2], ['2020-12-7', 'toyota', 0, 2], ['2020-12-7', 'toyota', 0, 1], ['2020-12-8', 'honda', 1, 2], ['2020-12-8', 'honda', 2, 1], ['2020-12-7', 'honda', 0, 1], ['2020-12-7', 'honda', 1, 2], ['2020-12-7', 'honda', 2, 1]]
daily_sales = pd.DataFrame(data, columns=['date_id', 'make_name', 'lead_id', 'partner_id']).astype({'date_id':'datetime64[ns]', 'make_name':'object', 'lead_id':'Int64', 'partner_id':'Int64'})
print(daily_leads_and_partners(daily_sales))
print(daily_leads_and_partners1(daily_sales))