是否存在R函数可对时间序列数据聚合计算月度平均值?
你需要按「月份」和「部门」两个维度分组,对各数值采集列计算平均值,聚合时会自动跳过NA值。以下是两种常用场景的实现方案:
方案1:Python Pandas 实现
import pandas as pd # 读取原数据,替换为你实际的读取方式,比如read_excel、read_parquet等 df = pd.read_csv('你的原数据路径.csv') # 1. 将Timestamp列转为标准时间格式 df['Timestamp'] = pd.to_datetime(df['Timestamp']) # 2. 提取月份作为分组字段 df['month'] = df['Timestamp'].dt.to_period('M') # 3. 按月份+部门分组求平均值,自动跳过NA值 monthly_avg = df.groupby(['month', 'Department'], as_index=False)[['Value1', 'Value2']].mean() # 可选操作:如果需要把汇总结果追加回原表 ## 先给汇总结果补全时间格式,统一用每月第一天作为月度数据的时间戳 # monthly_avg['Timestamp'] = pd.to_datetime(monthly_avg['month'].astype(str) + '-01 00:00:00') # final_df = pd.concat([df, monthly_avg.drop('month', axis=1)], ignore_index=True) # 导出结果 monthly_avg.to_csv('月度汇总结果.csv', index=False)
以你给出的样例数据计算,1970年1月采购部(Procurement)的Value1月度平均值为0.25,Value2月度平均值为0.55,和预期计算结果一致。
方案2:SQL 实现(以MySQL为例)
如果数据存储在关系型数据库中,可直接用SQL语句聚合得到结果:
SELECT DATE_FORMAT(`Timestamp`, '%Y-%m') AS `month`, `Department`, AVG(`Value1`) AS `avg_Value1`, AVG(`Value2`) AS `avg_Value2` FROM 你的表名 GROUP BY `month`, `Department` ORDER BY `month`, `Department`;
SQL的AVG函数会自动忽略NULL(对应你表中的NA),无需额外处理。如果需要将结果写入新表,可在语句开头加CREATE TABLE 月度汇总表 AS 即可。
内容的提问来源于stack exchange,提问作者Ummsen
相关产品推荐
相关产品推荐

