如何用Pandas高效计算各分组最新事件的实时平均值?
高效实现方法(Pandas矢量化操作)
原始的iterrows迭代方案在数据量较大时效率极低,因为它是逐行处理,没有利用Pandas的矢量化运算优势。下面是完全基于Pandas内置功能的高效实现:
import pandas as pd # 1. 确保timestamp为 datetime 类型并按时间排序 df['timestamp'] = pd.to_datetime(df['timestamp']) df_sorted = df.sort_values('timestamp').reset_index(drop=True) # 2. 生成透视表,按时间戳和公司名称整理value # 缺失值用前向填充(获取该公司最近的有效value) pivot_data = df_sorted.pivot_table( index='timestamp', columns='name', values='value' ).ffill() # 3. 计算每个时间点下各公司最新value的平均值 aggregated_df = pivot_data.mean(axis=1).reset_index(name='value')
步骤解释
- 类型转换与排序:先将
timestamp转为datetime类型并排序,确保后续的前向填充逻辑正确。 - 透视表构建:通过
pivot_table将数据转换为以时间戳为行、公司名为列的结构,此时每个时间戳对应的公司value如果没有记录会显示为NaN。 - 前向填充:
ffill()会将每个公司的NaN值填充为该公司最近一次的有效value,这就实现了"每个时间点下各公司最新事件的value"的需求。 - 计算平均值:对每行(每个时间戳)的所有公司value取平均,最终得到目标结果。
结果验证
该方案生成的aggregated_df与你用迭代方法得到的结果完全一致,且执行效率比迭代方法提升几个数量级,尤其在数据量较大时表现更明显。
内容的提问来源于stack exchange,提问作者Philipp Chapkovski
相关产品推荐
相关产品推荐

