每日leetcode

发布于:2025-06-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

2891. 方法链 - 力扣(LeetCode)

题目

DataFrame animals

+-------------+--------+
| Column Name | Type   |
+-------------+--------+
| name        | object |
| species     | object |
| age         | int    |
| weight      | int    |
+-------------+--------+

编写一个解决方案来列出体重 严格超过  100  千克的动物的名称。

按体重 降序 返回动物。

返回结果格式如下示例所示。

示例 1:

输入:
DataFrame animals:
+----------+---------+-----+--------+
| name     | species | age | weight |
+----------+---------+-----+--------+
| Tatiana  | Snake   | 98  | 464    |
| Khaled   | Giraffe | 50  | 41     |
| Alex     | Leopard | 6   | 328    |
| Jonathan | Monkey  | 45  | 463    |
| Stefan   | Bear    | 100 | 50     |
| Tommy    | Panda   | 26  | 349    |
+----------+---------+-----+--------+
输出:
+----------+
| name     |
+----------+
| Tatiana  |
| Jonathan |
| Tommy    |
| Alex     |
+----------+
解释:
所有体重超过 100 的动物都应包含在结果表中。
Tatiana 的体重为 464,Jonathan 的体重为 463,Tommy 的体重为 349,Alex 的体重为 328。
结果应按体重降序排序。

在 Pandas 中,方法链 允许我们在 DataFrame 上执行操作,而无需将每个操作拆分成单独的行或创建多个临时变量。

你能用 一行 代码的方法链完成这个任务吗?

思路

  1. 本题考察的是使用的df的sort_values方法,对属性进行排序。
  2. 首先先根据bool索引查找体重大于100kg的动物数据,然后对这些数据使用sort_values方法对weight进行降序排列,接着取出名字series,最后再组成DataFrame即可。

代码实现

import pandas as pd

def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
    return pd.DataFrame((animals[animals["weight"]>100].sort_values(by="weight", ascending=False))["name"])

知识积累

  • 对DataFrame的数据排序:df.sort_values(by, axis=0, ascending=True, inplace=False, na_position='last')
    • by:指定列名(axis=0或"index")或索引值(axis=1或"columns")
    • axis:成组的轴,若axis=0或"index",则行成组,按指定列的数据大小排序;若axis=1或"columns",则列成组,按指定索引中的数据大小排序。
    • ascending:排序方式,True为升序,False为降序。
    • inplace:是否用排序后的数据替换原数据,如果为True替换完后返回None,如果为False不替换,直接返回排序后的数据。
    • na_position:设定缺失值的显示位置,有"first", "last"两种。

官方题解

  • 这种一行代码完成多个方法的操作就叫方法链,不过官解里面有一个细节还是有必要学习的,在df上选择列,如果只有一个中括号,返回的是series对象,如果是两个,则是指定多列,返回的是DataFrame对象。
  • 复现:
  • import pandas as pd
    
    def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
        return (animals[animals["weight"]>100].sort_values(by="weight", ascending=False))[["name"]]


网站公告

今日签到

点亮在社区的每一天
去签到