长格式pandas dataframe重采样保留点位计算日均速度的方法
解决方法
你当前直接对全量数据集调用resample计算均值,会把同一天内所有点位的观测值合并计算,自然无法保留点位维度的分组结果。你需要先按点位列分组,再对每个分组单独执行重采样聚合操作即可。
完整修改后代码
import pandas as pd import numpy as np dti = pd.date_range('2015-01-01', '2015-12-31', freq='15min') df = pd.DataFrame(index = dti) df['Location'] = 'A' df['speed'] = np.random.randint(low=0, high=60, size=len(df.index)) # 可自行补充距离列 df['distance'] = df['speed'] * 0.25 # 15分钟=0.25小时 dti2 = pd.date_range('2015-01-01', '2016-06-05', freq='30min') df2 = pd.DataFrame(index = dti2) df2['Location'] = 'B' df2['speed'] = np.random.randint(low=0, high=60, size=len(df2.index)) df2['distance'] = df2['speed'] * 0.5 # 30分钟=0.5小时 # 旧版本pandas可用append,新版本推荐用concat df = pd.concat([df, df2]) # 核心逻辑:先按点位分组,再对每个分组重采样求均值 daily_avg = df.groupby('Location').resample('D')[['speed', 'distance']].mean() # 如果你需要把多层索引转为普通列,加下面这行即可 daily_avg = daily_avg.reset_index()
逻辑说明
- 首先
groupby('Location')会将数据集按A、B两个点位拆分为独立的子数据集,互不干扰 - 对每个子数据集单独执行
resample('D')按日对齐时间轴,自动适配两个点位不同的采样频率 - 最后指定
[['speed', 'distance']].mean()对每个点位、每一天的对应指标单独计算均值,不会出现跨点位合并计算的问题
内容的提问来源于stack exchange,提问作者user9118870
相关产品推荐
相关产品推荐

