基于LeetCode实战的Pandas技巧

本文介绍了如何使用Pandas在LeetCode题目中进行数据查询和选择,如找出第二高的薪水,以及如何利用rank函数对成绩进行排名。涉及了drop_duplicates、sort_values和DataFrame.rank等核心功能及其参数解释。
摘要由CSDN通过智能技术生成

引言

LeetCode新出了Pandas题库,本人感兴趣就拿了一下它的那个勋章,收获还是有的。但最近需要用到Pandas了,把当时刷题时学的内容又忘了,故写下本篇博客,整理Pandas的各种技巧。

查询/选择

LeetCode 176. 第二高的薪水

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

从Employee表中选择第二高的薪水:

使用df.drop_duplicates筛选不重复的所有薪资
df.drop_duplicates(subset=None, keep=‘first’, inplace=False, ignore_index=False)

  • subset: 设置根据列的子集来判断重复值,默认根据DataFrame的所有列来判断重复值,即所有列的数据都相同时,才算重复值。如果指定了子集,则只要子集的这些列的数据都相同,就算重复值。
  • keep: 设置保留重复值中的哪一个,可以设置的值有{‘first’, ‘last’, False},默认first,如果有重复值,则保留第一个。设置为last,则保留重复值中的最后一个。设置为False,则删除所有的重复值,一个也不保留。
  • inplace: 设置是否在DataFrame本身删除数据,默认为False,在DataFrame的副本里删除数据,返回删除数据后的DataFrame。如果设置为True,则在调用drop()的DataFrame本身执行删除,返回值为None。
  • ignore_index: 设置是否忽略行索引,默认False,去重后的结果的行索引保持原索引不变。如果设置为True,则结果的行索引被重置为0开始的自然数。

使用df.sort_values 对薪资进行排序
df.sort_values()

# 只列举关键代码
df = employee.drop_duplicates(subset=['salary']).sort_values('salary',ascending=False)
# 用loc选的是行标签,iloc是行下标,排序后100的行标签并不会变,原来第几就是几
return df.iloc[[1]][['salary']].rename(columns={'salary':f'SecondHighestSalary'})

使用drop删除数据:
drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’):

  • labels: 指定要删除的行索引或列名,参数传入方式为字符串或list-like。如果指定的是列名,要配合将axis参数设置为1或columns。
  • axis: 设置删除行还是删除列,0或index表示删除行,1或columns表示删除列,默认值为0。
  • index: 设置要删除的行,相当于设置labels且axis为0或index。
  • columns: 设置要删除的列,相当于设置labels且axis为1或columns。
  • level: 如果索引是多重索引,指定按多重索引中的哪个等级的索引删除,可以传入多重索引的下标或名称。
  • inplace: 设置是否在DataFrame本身删除数据,默认为False,在DataFrame的副本里删除数据,返回删除数据后的DataFrame。如果设置为True,则在调用drop()的DataFrame本身执行删除,返回值为None。
  • errors: 设置是否抛出错误,可以设置的值有{‘ignore’, ‘raise’},默认raise,表示抛出错误。ignore表示忽略错误,跳过传入的错误索引名或列名,正确的索引名或列名不受影响,正常执行删除。

排序

178. 分数排名

问题:输入一个成绩,排序后并输出它的排名

输入: 
Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
输出: 
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

主要核心函数:

scores['rank'] = scores['score'].rank(method='dense',ascending=False)
return scores[['score','rank']].sort_values('score',ascending=False)

DataFrame.rank(axis=0, method=‘average’, numeric_only=False, na_option=‘keep’, ascending=True, pct=False)
参数

  • axis{0 or ‘index’, 1 or ‘columns’}, default 0。选择坐标轴,按行排序的 axis=0或’index’,反之
  • method{‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}, default ‘average’ 排序方法
    • average:并列名次选平均的,并列第二,算并列2.5名
    • min:并列名次选最小的,并列第一,就算并列第一
    • max:存在并列排名,并列的次序选择大的那个,比如两个人并列第一,算并列第二
    • first:按照出现次序排序(不存在并列排名),最后一个名次等于人数
    • dense:相同的得分排序一致(存在并列排名),但最后一个名次可能小于人数
  • numeric_only bool, default False 是否仅仅计算数字型的columns,布尔值
  • na_option{‘keep’, ‘top’, ‘bottom’}, default ‘keep’ NaN值是否参与排名及如何排名
    • keep:将NaN等级分配给NaN值
    • top: 将NaN排名至顶部
    • bottom:将NaN排名至底部
  • ascending bool, default True 是否为升序
  • pc tbool, default False 是否以百分比形式显示返回的排名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值