- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
事件表:
Events
+---------------+---------+ | Column Name | Type | +---------------+---------+ | business_id | int | | event_type | varchar | | occurrences | int | +---------------+---------+ (business_id, event_type) 是这个表的主键(具有唯一值的列的组合)。 表中的每一行记录了某种类型的事件在某些业务中多次发生的信息。平均活动 是指有特定
event_type
的具有该事件的所有公司的occurrences
的均值。活跃业务 是指具有 多个
event_type
的业务,它们的occurrences
严格大于 该事件的平均活动次数。写一个解决方案,找到所有 活跃业务。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Events table: +-------------+------------+-------------+ | business_id | event_type | occurrences | +-------------+------------+-------------+ | 1 | reviews | 7 | | 3 | reviews | 3 | | 1 | ads | 11 | | 2 | ads | 7 | | 3 | ads | 6 | | 1 | page views | 3 | | 2 | page views | 12 | +-------------+------------+-------------+ 输出: +-------------+ | business_id | +-------------+ | 1 | +-------------+ 解释: 每次活动的平均活动可计算如下: - 'reviews': (7+3)/2 = 5 - 'ads': (11+7+6)/3 = 8 - 'page views': (3+12)/2 = 7.5 id=1 的业务有 7 个 'reviews' 事件(多于 5 个)和 11 个 'ads' 事件(多于 8 个),所以它是一个活跃的业务。
三,建表语句
import pandas as pd
data = [[1, 'reviews', 7], [3, 'reviews', 3], [1, 'ads', 11], [2, 'ads', 7], [3, 'ads', 6], [1, 'page_views', 3], [2, 'page_views', 12]]
events = pd.DataFrame(data, columns = ['business_id', 'event_type', 'occurences']).astype({'business_id':'Int64', 'event_type':'object', 'occurences':'Int64'})
四,分析
表格大法
第一步:开一新列,以事件类型分组,统计每个事件类型的平均值
第二步:过滤 掉活动次数小于平均的
第三步:以记录id分组 cnt记录id的数量 过滤出大于1的值 第四步:拿到记录id 并输出
解题过程
代码实现以上过程
第一步:开一新列,以事件类型分组,统计每个事件类型的平均值
在pandas
第二步:过滤 掉活动次数小于平均的
在pandas
第三步:以记录id分组 cnt记录id的数量 过滤出大于1的值
在pandas
第四步:拿到记录id 并输出
五,Pandas解答
import pandas as pd
def active_businesses(events: pd.DataFrame) -> pd.DataFrame:
#取出各个类型的平均数
events['avg_o'] = events.groupby('event_type')['occurences'].transform('mean')
#过滤掉小于平均数的类型
res = events[events['occurences']>events['avg_o']].reset_index()
#以用户id分组 求用户id的数量
res['cnt'] = res.groupby('business_id')['business_id'].transform('count')
#过于掉小于1的
res1 = res[res['cnt']>1]
#拿到最终的结果 去重一下 转为df对象
df = res1['business_id'].drop_duplicates().to_frame()
return df
active_businesses(events)
六,验证
七,知识点总结
- Pandas中模拟avg开窗的操作 API: groupby...transfrom
- Pandas中条件过滤的运用
- Pandas中重置索引的运用
- Pandas中分组聚合大于运用 类似count开窗的运用
- Pandas中去重的运用 API drop_duplicates
- Pandas中把series对象转为dataframe对象的运用
- Python函数的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用