欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 每日leetcode

每日leetcode

2025/8/5 22:04:22 来源:https://blog.csdn.net/XiaoyaoCarter/article/details/148747427  浏览:    关键词:每日leetcode

2889. 数据重塑:透视 - 力扣(LeetCode)

题目

DataFrame weather

+-------------+--------+
| Column Name | Type   |
+-------------+--------+
| city        | object |
| month       | object |
| temperature | int    |
+-------------+--------+

编写一个解决方案,以便将数据 旋转,使得每一行代表特定月份的温度,而每个城市都是一个单独的列。

输出结果格式如下示例所示。

示例 1:

输入:
+--------------+----------+-------------+
| city         | month    | temperature |
+--------------+----------+-------------+
| Jacksonville | January  | 13          |
| Jacksonville | February | 23          |
| Jacksonville | March    | 38          |
| Jacksonville | April    | 5           |
| Jacksonville | May      | 34          |
| ElPaso       | January  | 20          |
| ElPaso       | February | 6           |
| ElPaso       | March    | 26          |
| ElPaso       | April    | 2           |
| ElPaso       | May      | 43          |
+--------------+----------+-------------+
输出:
+----------+--------+--------------+
| month    | ElPaso | Jacksonville |
+----------+--------+--------------+
| April    | 2      | 5            |
| February | 6      | 23           |
| January  | 20     | 13           |
| March    | 26     | 38           |
| May      | 43     | 34           |
+----------+--------+--------------+

解释:
表格被旋转,每一列代表一个城市,每一行代表特定的月份。

思路

  1. 首先使用pd的pivot函数将行索引变成month,列索引变成city,值用temperature填充。
  2. 但是这样的结果因为是多维索引,所以列名表示会有问题?查询多方无果,但是打印了一下发现列名其实是对的,所以又用列名更新了一下自己,竟然就对了(很迷惑)。

代码实现

import pandas as pddef pivotTable(weather: pd.DataFrame) -> pd.DataFrame:pt = pd.pivot(weather, values="temperature", index="month", columns="city")return pt

知识积累

  • df数据透视表:
    • df.pivot(index, columns, values)
      • index:指定一列作为索引,如果没有指定则用原来的索引。
      • columns:指定一列的值作为列名。
      • values:指定一列作为生成的对象的值,如果置空,那么剩余的列将会形成列的多层索引,虽然不该变透视表的列名,但是展示出来的列名是异常的(第一层是未出现的列名,第二层是columns的列)。
    • df.pivot_table(index, columns, values, aggfunc, ...)——pivot方法要求不能出先行列索引重复的情况,即若行列索引相同时,应该进行数据聚合,那么就得使用这个方法。
      • 主要参数和上面都一样,但是index必须指定。
      • aggfunc:聚合函数,如果出现重复的行列索引的数据怎么做聚合,默认为"mean"。

官方题解

  • 原来是用df的pivot函数,但是必须指定values,不然就会将未包含的列加入多层索引中。
  • 复现:
  • import pandas as pddef pivotTable(weather: pd.DataFrame) -> pd.DataFrame:pt = weather.pivot(index="month", columns="city", values="temperature")return pt

版权声明:

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

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

热搜词