首页 > 编程语言 >1,Python数分之Pandas训练,力扣,1783. 大满贯数量

1,Python数分之Pandas训练,力扣,1783. 大满贯数量

时间:2024-09-20 18:49:54浏览次数:11  
标签:count df6 Python 1783 player 数分 pd open id

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

目录

 一,原题力扣链接

二,题干

三,建表语句

四,分析

四,Pandas解答:

五,验证

六,总结


 一,原题力扣链接

. - 力扣(LeetCode)

二,题干

表:Players

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| player_id      | int     |
| player_name    | varchar |
+----------------+---------+
player_id 是这个表的主键(具有唯一值的列)
这个表的每一行给出一个网球运动员的 ID 和 姓名

表:Championships

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| year          | int     |
| Wimbledon     | int     |
| Fr_open       | int     |
| US_open       | int     |
| Au_open       | int     |
+---------------+---------+
year 是这个表的主键(具有唯一值的列)
该表的每一行都包含在每场大满贯网球比赛中赢得比赛的球员的 ID

编写解决方案,找出每一个球员赢得大满贯比赛的次数。结果不包含没有赢得比赛的球员的ID 。

结果集 无顺序要求 。

结果的格式,如下所示。

示例 1:

输入:
Players 表:
+-----------+-------------+
| player_id | player_name |
+-----------+-------------+
| 1         | Nadal       |
| 2         | Federer     |
| 3         | Novak       |
+-----------+-------------+
Championships 表:
+------+-----------+---------+---------+---------+
| year | Wimbledon | Fr_open | US_open | Au_open |
+------+-----------+---------+---------+---------+
| 2018 | 1         | 1       | 1       | 1       |
| 2019 | 1         | 1       | 2       | 2       |
| 2020 | 2         | 1       | 2       | 2       |
+------+-----------+---------+---------+---------+
输出:
+-----------+-------------+-------------------+
| player_id | player_name | grand_slams_count |
+-----------+-------------+-------------------+
| 2         | Federer     | 5                 |
| 1         | Nadal       | 7                 |
+-----------+-------------+-------------------+
解释:
Player 1 (Nadal) 获得了 7 次大满贯:其中温网 2 次(2018, 2019), 法国公开赛 3 次 (2018, 2019, 2020), 美国公开赛 1 次 (2018)以及澳网公开赛 1 次 (2018) 。
Player 2 (Federer) 获得了 5 次大满贯:其中温网 1 次 (2020), 美国公开赛 2 次 (2019, 2020) 以及澳网公开赛 2 次 (2019, 2020) 。
Player 3 (Novak)  没有赢得,因此不包含在结果集中。

三,建表语句

import pandas as pd

data = [[1, 'Nadal'], [2, 'Federer'], [3, 'Novak']]
players = pd.DataFrame(data, columns=['player_id', 'player_name']).astype({'player_id':'Int64', 'player_name':'object'})
data = [[2018, 1, 1, 1, 1], [2019, 1, 1, 2, 2], [2020, 2, 1, 2, 2]]
championships = pd.DataFrame(data, columns=['year', 'Wimbledon', 'Fr_open', 'US_open', 'Au_open']).astype({'year':'Int64', 'Wimbledon':'Int64', 'Fr_open':'Int64', 'US_open':'Int64', 'Au_open':'Int64'})

四,分析

 

第一步,分别以赛事聚合,求每个赛事的次数  最后union合并

df1 = championships.groupby('Wimbledon')['Wimbledon'].count()
df2 = championships.groupby('Fr_open')['Fr_open'].count()
df3 = championships.groupby('US_open')['US_open'].count()
df4 = championships.groupby('Au_open')['Au_open'].count()
df5 = pd.concat([df1,df2,df3,df4])

第二步,对这个表 以球员id分组 sum 次数

期间把  series对象转为 datafarme对象

df6 = df5.to_frame()
df6['player_id'] = df6.index
df6['次数'] = df6[0]
df7 = df6.groupby(['player_id'])['次数'].sum()

第三步: 合并2个表 并且修改表名 使用marge 内连接

 

df8 = pd.merge(players,df7,how='inner',on='player_id')
df9 = df8.rename(columns={'次数':'grand_slams_count'})

四,Pandas解答:

import pandas as pd

def grand_slam_titles(players: pd.DataFrame, championships: pd.DataFrame) -> pd.DataFrame:
    df1 = championships.groupby('Wimbledon')['Wimbledon'].count()
    df2 = championships.groupby('Fr_open')['Fr_open'].count()
    df3 = championships.groupby('US_open')['US_open'].count()
    df4 = championships.groupby('Au_open')['Au_open'].count()
    df5 = pd.concat([df1,df2,df3,df4])
    df6 = df5.to_frame()
    df6['player_id'] = df6.index
    df6['次数'] = df6[0]
    df7 = df6.groupby(['player_id'])['次数'].sum()
    df8 = pd.merge(players,df7,how='inner',on='player_id')
    df9 = df8.rename(columns={'次数':'grand_slams_count'})
    return df9

五,验证

六,总结

  • Pandas中分组聚合的运用 API:groupby
  • Pandas中纵向合并的运用 API:concat
  • Pandas中series转frame对象的运用 API: to_frame
  • Pandas中合并两个表的运用 API:merge
  • Pandas中修改列名的运用 API: rename
  • python中函数的运用

标签:count,df6,Python,1783,player,数分,pd,open,id
From: https://blog.csdn.net/qq_55006020/article/details/142392584

相关文章

  • python下载知识
    PythonPython设置禁用路径长度限制的优缺点在本文中,我们将介绍如何设置禁用Python的路径长度限制,以及这样做的优点和缺点。阅读更多:Python教程什么是路径长度限制路径长度限制是指在操作系统中,文件或文件夹的路径字符数是有限制的。在Windows操作系统中,路径长度限制为260个......
  • A lightweight python package, alternative of pyscafford
    python_packagehttps://github.com/fanqingsong/python_packageDescriptionAproductionreadypythonlibrarytemplateMetadataanddependencyinformationisstoredinthepyproject.tomlforcompatibilitywithbothpipandpoetry.Flake8,pylint,andi......
  • 使用Python做一个微信机器人
    随着人工智能和自动化技术的快速发展,微信机器人已经成为越来越多人的选择。它们可以帮助我们自动回复消息、管理群组、发送定时消息等,极大地提高了我们的工作效率。而gewe,作为一款开源的微信机器人框架,为开发者提供了便捷的开发体验。接下来,让我们一步步打造属于自己的微信机器人。......
  • 我在 Marscode 用了 3 天,转行成为 Python 程序员
    以下是「 豆包MarsCode 体验官」优秀文章,作者不惑_。豆包MarsCode 项目实战Java程序员转行Python学习之路俗话说:工欲善其事,必先利其器。在历史的长河中,新手程序员最大的痛点之一就是搭建开发环境。先就是今天,如果你没有VSCode,甚至也没有其他IDE,那么也没有关系。豆包......
  • 16个必知必会的Python教程!
     介绍Python是一门用途广泛的编程语言,它具有大量的库和框架。有一些鲜为人知的Python编码技巧和库可以让你作为开发人员的工作更为轻松,编写代码更高效。本文中将探讨一些鲜为人知的Python技巧,这些技巧非常有用,但并不广为人知。通过学习和使用这些技巧,可以帮你节省时间......
  • 【python爬虫案例】利用python爬取豆瓣读书评分TOP250排行数据
    一、爬取案例-豆瓣读书TOP250上一期给大家分享了个python爬虫案例:豆瓣电影TOP250的排行榜数据爬取【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!今天再给大家分享一下:豆瓣读书排行榜TOP250的python爬虫案例!因为是同一个网站,所以流程和逻辑上都是差不多的。......
  • python怎么打开编辑器
    1、在电脑开始菜单中点击所有程序,找到Python程序,点击其中idle。2、然后点击左上角的“File”,打开菜单,在下拉菜单中选择“NewFile”选项,就可打开python编辑器了。3、在打开的python编辑器中就可以输入自己想写的代码了。......
  • python怎么创建数据库
    python怎么创建数据库?具体方法如下:import pymysql#数据库基本信息config = {          'host':'localhost',          'port':3306,          'user':'root',          'passwd':'root',          'db�......
  • 华为OD机试真题- 关联子串 python-2024年OD统一考试(E卷)
     最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。题目描述:给定两个字符串str1和str2,如......
  • 基于Python+Vue开发的鲜牛奶订购管理系统
    项目简介该项目是基于Python+Vue开发的鲜牛奶订购管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的牛奶订购管理系统项目,大学生可以在实践中学习和提升自己......