如何匹配不同时间分辨率的Pandas DataFrame:生成每日温度值并实现无NaN合并
嘿,我来帮你搞定这个问题!你之前硬编码插值没成功很正常,其实Pandas针对时间序列的插值和合并有现成的好用工具,一步步来就行:
步骤1:统一日期格式为datetime类型
首先得确保两个DataFrame的日期列都被Pandas识别为时间类型,这是后续时间序列操作的基础:
import pandas as pd # 假设你的visitors表有'date'列,temperatures表有'week_date'列(存储每周的日期,比如周一开始的日期) visitors['date'] = pd.to_datetime(visitors['date']) temperatures['week_date'] = pd.to_datetime(temperatures['week_date'])
步骤2:将周度温度扩展为每日温度
接下来把周度的温度数据转换成每日数据,这里用Pandas的resample和interpolate就能轻松实现,不用手动硬编码:
# 先把温度表的索引设为周日期 temperatures = temperatures.set_index('week_date') # 按天重采样,并用时间插值法填充每日温度值 # method='time'会根据时间间隔计算中间值,比普通线性插值更贴合时间序列场景 daily_temperatures = temperatures.resample('D').interpolate(method='time') # 如果你的业务需求是整周复用同一个温度值(比如每周温度是周平均),可以改用向前填充: # daily_temperatures = temperatures.resample('D').ffill()
步骤3:合并访客数据与每日温度数据
现在两个数据集都是每日粒度了,直接通过日期键合并即可,用inner连接方式能确保最终结果没有NaN值(只保留两个表都有的日期):
# 把访客表的索引也设为日期,方便快速合并 visitors = visitors.set_index('date') # 合并两个DataFrame combined_df = visitors.join(daily_temperatures, how='inner') # 如果你不想修改索引,也可以用merge方法: # combined_df = pd.merge(visitors, daily_temperatures.reset_index(), on='date', how='inner')
这样处理后,你就能得到一个没有NaN值的合并数据集,其中每一行对应一天的访客数和当日温度啦!
内容的提问来源于stack exchange,提问作者gokdumano
相关产品推荐
相关产品推荐

