力扣刷题(第四十五天)
灵感来源
- 保持更新,努力学习
- python脚本学习
上升的温度
解题思路
-
数据预处理:
- 将
recordDate
转换为日期时间类型以便进行日期计算 - 按日期排序确保数据按时间顺序排列
- 将
-
创建前一天的参考列:
- 使用
shift(1)
方法创建前一天的温度和日期列 - 计算当前日期与前一天的日期差
- 使用
-
筛选条件:
- 当前温度大于前一天温度
- 日期差恰好为一天(排除非连续日期的干扰)
-
结果返回:
- 提取符合条件的
id
列作为最终结果import pandas as pddef rising_temperature(weather: pd.DataFrame) -> pd.DataFrame:# 将 recordDate 列转换为日期时间类型weather['recordDate'] = pd.to_datetime(weather['recordDate'])# 按日期排序,确保数据按时间顺序排列weather = weather.sort_values('recordDate')# 创建前一天的温度和日期列weather['prev_temp'] = weather['temperature'].shift(1)weather['prev_date'] = weather['recordDate'].shift(1)# 计算日期差,确保是连续的一天weather['date_diff'] = weather['recordDate'] - weather['prev_date']# 筛选出温度升高且日期差为一天的记录result = weather[(weather['Temperature'] > weather['prev_temp']) & (weather['date_diff'] == pd.Timedelta(days=1))]# 返回符合条件的 id 列return result[['id']]
- 提取符合条件的
逐行解释
import pandas as pddef rising_temperature(weather: pd.DataFrame) -> pd.DataFrame:# 确保列名存在且标准化(转为小写)weather.columns = weather.columns.str.lower()# 检查是否存在 temperature 列if 'temperature' not in weather.columns:raise ValueError("数据集中缺少 temperature 列")# 将 recordDate 列转换为日期时间类型weather['recorddate'] = pd.to_datetime(weather['recorddate'])# 按日期排序,确保数据按时间顺序排列weather = weather.sort_values('recorddate')# 创建前一天的温度和日期列weather['prev_temp'] = weather['temperature'].shift(1)weather['prev_date'] = weather['recorddate'].shift(1)# 计算日期差,确保是连续的一天weather['date_diff'] = weather['recorddate'] - weather['prev_date']# 筛选出温度升高且日期差为一天的记录result = weather[(weather['temperature'] > weather['prev_temp']) & (weather['date_diff'] == pd.Timedelta(days=1))]# 返回符合条件的 id 列return result[['id']].reset_index(drop=True)