如何使用Python对DataFrame指定不同行取平均值以降低时间分辨率
Pandas时序数据降采样至天粒度解决方案
假设你要处理的DataFrame中存储时间的列名为timestamp,其余列均为需要计算均值的数值型字段,按以下步骤操作即可:
- 先将时间列转换为pandas支持的datetime格式
import pandas as pd # 转换时间列格式 df['timestamp'] = pd.to_datetime(df['timestamp'])
- 按天聚合取均值,两种常用方法二选一即可:
- 方法1:重采样法(适合时间作为索引的场景)
# 将时间列设为索引后按天重采样,计算所有数值列均值 df_daily = df.set_index('timestamp').resample('D').mean().reset_index() # 若不需要输出时间中的时分秒信息,可追加以下代码转换为纯日期格式 df_daily['timestamp'] = df_daily['timestamp'].dt.date
- 方法2:分组法(适配所有场景)
# 提取纯日期作为分组键 df['date'] = df['timestamp'].dt.date # 按日期分组计算均值,自动忽略非数值列 df_daily = df.groupby('date', as_index=False).mean()
注意事项
- 若存在不需要参与均值计算的非数值列,可在聚合前先筛选需要保留的列:
df = df[['timestamp', '需要计算的列1', '需要计算的列2']] - 默认
mean()计算会自动跳过空值,若需要排除包含空值的行再计算,可提前执行df = df.dropna()
内容的提问来源于stack exchange,提问作者hfliu
相关产品推荐
相关产品推荐

