欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > [每日一练]制作会话柱状图(自定义全条件表格从而连接进行判断)

[每日一练]制作会话柱状图(自定义全条件表格从而连接进行判断)

2024/11/29 16:42:26 来源:https://blog.csdn.net/2302_77975940/article/details/144065640  浏览:    关键词:[每日一练]制作会话柱状图(自定义全条件表格从而连接进行判断)

#该题目来源于力扣:

1435. 制作会话柱状图 - 力扣(LeetCode)

题目要求:

表:Sessions+---------------------+---------+
| Column Name         | Type    |
+---------------------+---------+
| session_id          | int     |
| duration            | int     |
+---------------------+---------+
session_id 是该表主键
duration 是用户访问应用的时间, 以秒为单位你想知道用户在你的 app 上的访问时长情况。因此你决定统计访问时长区间分别为 "[0-5>","[5-10>","[10-15>" 和 "15 minutes or more" 的会话数量,并以此绘制柱状图。写一个解决方案来报告 (bin, total) 。返回结果 无顺序要求 。结果格式如下所示。示例 1:输入:
Sessions 表:
+-------------+---------------+
| session_id  | duration      |
+-------------+---------------+
| 1           | 30            |
| 2           | 199           |
| 3           | 299           |
| 4           | 580           |
| 5           | 1000          |
+-------------+---------------+
输出:
+--------------+--------------+
| bin          | total        |
+--------------+--------------+
| [0-5>        | 3            |
| [5-10>       | 1            |
| [10-15>      | 0            |
| 15 or more   | 1            |
+--------------+--------------+
解释:
对于 session_id 1,2 和 3 ,它们的访问时间大于等于 0 分钟且小于 5 分钟。
对于 session_id 4,它的访问时间大于等于 5 分钟且小于 10 分钟。
没有会话的访问时间大于等于 10 分钟且小于 15 分钟。
对于 session_id 5, 它的访问时间大于等于 15 分钟。

思路流程:

  1. 创建具有所有条件的列
  2. 定义函数进行条件判断,这样就可以将这些复杂的判断一起传递给lambda遍历函数了

  3. 将自定义判断函数遍历传递给新建列bin_s

  4. 将两个表按照bin表(圈条件表)进行连接,然后按照bin表的bin列进行分组聚合即可

代码实现:

import pandas as pddef create_bar_chart(sessions: pd.DataFrame) -> pd.DataFrame:#创建具有所有条件的列bin=pd.DataFrame({'bin_l':['[0-5>','[5-10>','[10-15>','15 or more']})#定义函数进行条件判断,这样就可以将这些复杂的判断一起传递给lambda遍历函数了def funcion(x):if x<300:return '[0-5>'elif x<600 and x>=300:return '[5-10>'elif x<900 and x>=600:return '[10-15>'else:return '15 or more'#将自定义判断函数遍历传递给新建列binsessions['bin_s']=sessions['duration'].apply(lambda x:funcion(x))#将两个表按照bin表(圈条件表)进行连接,然后按照bin表的bin列进行分组聚合即可data=sessions.merge(bin,left_on='bin_s',right_on='bin_l',how='right')data=data.groupby('bin_l')['session_id'].count().reset_index().rename(columns={'bin_l': 'bin', 'session_id': 'total'})return data

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com