长格式pandas dataframe多变量重采样保留各变量日均值方法问询
你直接对全表做重采样时没有区分不同变量的数值,把speed和distance的数值混在一起计算了平均值,所以得不到分变量的计算结果。
可行解法
核心思路是先按变量分组,再对每个分组单独做重采样计算,全程保持长表结构,不需要转宽格式,适配不同变量时间区间、采样频率不一致的场景。
推荐代码(性能更优)
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['speed'] = np.random.randint(low=0, high=60, size=len(df.index)) df['distance'] = df['speed'] * 0.25 df.reset_index(inplace=True) df2 = df.melt(id_vars = 'index') # 修改后的分变量重采样代码 df_daily_mean = df2.groupby( ['variable', pd.Grouper(key='index', freq='d')] )['value'].mean().reset_index() # 可选:重命名列让结构更易读 df_daily_mean.rename(columns={'index': 'date', 'value': 'daily_avg_value'}, inplace=True)
结果说明
输出的df_daily_mean是长表结构,每一行对应「单个变量+单个日期」的日均值:
- 同一日期下会分别生成
speed、distance两条独立的均值记录 - 不同变量的时间范围不重叠的部分不会强制生成空值记录,完全匹配业务数据的特性
内容的提问来源于stack exchange,提问作者user9118870
相关产品推荐
相关产品推荐

