当前位置: 首页 > news >正文

力扣之1355.活动参与者

  • 题目:

  • Sql 测试用例:

  • Create table If Not Exists Friends (id int, name varchar(30), activity varchar(30));
    Create table If Not Exists Activities (id int, name varchar(30));
    Truncate table Friends;
    insert into Friends (id, name, activity) values ('1', 'Jonathan D.', 'Eating');
    insert into Friends (id, name, activity) values ('2', 'Jade W.', 'Singing');
    insert into Friends (id, name, activity) values ('3', 'Victor J.', 'Singing');
    insert into Friends (id, name, activity) values ('4', 'Elvis Q.', 'Eating');
    insert into Friends (id, name, activity) values ('5', 'Daniel A.', 'Eating');
    insert into Friends (id, name, activity) values ('6', 'Bob B.', 'Horse Riding');
    Truncate table Activities;
    insert into Activities (id, name) values ('1', 'Eating');
    insert into Activities (id, name) values ('2', 'Singing');
    insert into Activities (id, name) values ('3', 'Horse Riding');
  • 分析:首先,我们可以先按照活动分组,然后算出每个活动中的id个数,然后按照这个总数进行排序,正序和倒序,然后不要排名为一的数据。

  • sql实现:

  • with t1 as (select activity,count(1) nu from Friends group by activity  -- 按照活动分组,然后算出每个组内id的个数
    ),t2 as (select activity,rank() over (order by nu) rk1,rank() over (order by nu desc ) rk2 from t1        -- 然后按照个数排序,算出升序和降序的排名(这里使用rank函数,因为需要考虑并列的情况))
    select activity from t2 where rk1 !=1 and rk2 !=1  -- 然后取出升序和降序排名不为1的活动名称
  • pandas测试例子:

  • data = [[1, 'Jonathan D.', 'Eating'], [2, 'Jade W.', 'Singing'], [3, 'Victor J.', 'Singing'], [4, 'Elvis Q.', 'Eating'], [5, 'Daniel A.', 'Eating'], [6, 'Bob B.', 'Horse Riding']]
    friends = pd.DataFrame(data, columns=['id', 'name', 'activity']).astype({'id':'Int64', 'name':'object', 'activity':'object'})
    data = [[1, 'Eating'], [2, 'Singing'], [3, 'Horse Riding']]
    activities = pd.DataFrame(data, columns=['id', 'name']).astype({'id':'Int64', 'name':'object'})
  • pandas分析:和sql 的解法差不多

  • pandas实现:

  • import pandas as pddef activity_participants(friends: pd.DataFrame, activities: pd.DataFrame) -> pd.DataFrame:friend=friends.groupby('activity')['id'].count().reset_index()  -- 分组,算出每个组内id个数friend['rn']=friend['id'].rank(method='min')  -- 升序排序考虑次数相同friend['rn1']=friend['id'].rank(method='min',ascending=False)  -- 降序排序考虑次数相同friend=friend[(friend['rn']!=1) & (friend['rn1']!=1)]['activity'] --然后取出升序和降序排名不为1的活动名称return friend.to_frame() -- 转换成dataframe对象

http://www.lryc.cn/news/456715.html

相关文章:

  • 数据资产治理:构建敏捷与安全的数据管理体系
  • Nodejs连接Mysql笔记
  • Canvas:AI协作的新维度
  • 【深度学习】— softmax回归、网络架构、softmax 运算、小批量样本的向量化、交叉熵
  • C# Wpf 图片按照鼠标中心缩放和平移
  • 网络安全产品类型
  • 【开源风云】从若依系列脚手架汲取编程之道(五)
  • 金融市场的衍生品交易及其风险管理探讨
  • 一、创建型(单例模式)
  • 毕业设计项目-古典舞在线交流平台的设计与实现(源码/论文)
  • 【秋招笔试】10.09华子秋招(已改编)-三语言题解
  • 【算法笔记】双指针算法深度剖析
  • 第二十二天|回溯算法| 理论基础,77. 组合(剪枝),216. 组合总和III,17. 电话号码的字母组合
  • 关闭IDM自动更新
  • Go 性能剖析工具 pprof 与 Graphviz 教程
  • 【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
  • JavaScript可视化:探索顶尖的图表库
  • 谷歌AI大模型Gemini API快速入门及LangChain调用视频教程
  • 进入容器:掌控Docker的世界
  • 初始Linux(二)基础命令
  • STM32 OLED
  • 伦敦金实时行情决策辅助!
  • ​Leetcode 746. 使用最小花费爬楼梯​ 入门dp C++实现
  • 路由协议常见知识点
  • 多模态大语言模型(MLLM)-InstructBlip深度解读
  • 网页前端开发之Javascript入门篇(7/9):字符串
  • 双登股份再战IPO:数据打架,实控人杨善基千万元股权激励儿子
  • 4.Python 函数(函数的定义、函数的传入参数、函数的返回值、None 类型、函数说明文档、变量的作用域)
  • 【JavaEE】——文件IO
  • Python的pandas库基本操作(数据分析)