- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Candidate
+-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | +-------------+----------+ id 是该表中具有唯一值的列 该表的每一行都包含关于候选对象的id和名称的信息。表:
Vote
+-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | candidateId | int | +-------------+------+ id 是自动递增的主键(具有唯一值的列)。 candidateId是id来自Candidate表的外键(reference 列)。 该表的每一行决定了在选举中获得第i张选票的候选人。编写解决方案来报告获胜候选人的名字(即获得最多选票的候选人)。
生成的测试用例保证 只有一个候选人赢得 选举。
返回结果格式如下所示。
示例 1:
输入: Candidate table: +----+------+ | id | name | +----+------+ | 1 | A | | 2 | B | | 3 | C | | 4 | D | | 5 | E | +----+------+ Vote table: +----+-------------+ | id | candidateId | +----+-------------+ | 1 | 2 | | 2 | 4 | | 3 | 3 | | 4 | 2 | | 5 | 5 | +----+-------------+ 输出: +------+ | name | +------+ | B | +------+ 解释: 候选人B有2票。候选人C、D、E各有1票。 获胜者是候选人B。
三,建表语句
import pandas as pd
data = [[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D'], [5, 'E']]
candidate = pd.DataFrame(data, columns=['id', 'name']).astype({'id':'Int64', 'name':'object'})
data = [[1, 2], [2, 4], [3, 3], [4, 2], [5, 5]]
vote = pd.DataFrame(data, columns=['id', 'candidateId']).astype({'id':'Int64', 'candidateId':'Int64'})
candidate
四,分析
题解:
表1:候选人表
字段:候选人id,候选人姓名
表2:候选人投标表
字段。id,候选人id
求投票最多的候选人
第一步: 左连接这个表
#第一步 左连接2个表
df = pd.merge(candidate,vote,how='left',left_on='id',right_on='candidateId')
df
第二步:以name分组 统计次数
第三步: 取最大值,然后条件过滤 单统计的次数=最大值的时候 取name
最后把他转为df对象输出即可
五,Pandas解答
import pandas as pd
def winning_candidate(candidate: pd.DataFrame, vote: pd.DataFrame) -> pd.DataFrame:
#第一步 左连接2个表
df = pd.merge(candidate,vote,how='left',left_on='id',right_on='candidateId')
#以name分组 统计次数
df1 = df.groupby('name').count()
#开一个新列 取最大值
df1['mo']=df1['candidateId'].max()
#条件过滤 过滤之后 添加一个索引
df1 = df1[df1['candidateId']==df1['mo']].reset_index()
#映射指定的列
df2 = df1['name'].to_frame()
return df2
winning_candidate(candidate,vote)
六,验证
七,知识点总结
- Pandas中左连接的运用 API: merge
- Pandas中分组 count的运用 API :groupby....count
- Pandas中最大值的运用 API: max
- Pandas中过滤的运用
- Pandas中添加一个索引的运用 API:reset_index()
- Pandas中把series对象变成dataframe的运用 API:to_frame
- python函数的综合运用
- 经典题目:众多候选人中得票最多的人 也是一个变相的分组求top1
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用