Pandas如何对同ID DataFrame行成对组合并计算Val1/Val2平均值
Pandas 实现相邻同ID行配对求均值方案
核心代码
import pandas as pd # 测试用数据集 df = pd.DataFrame(columns=['ID', 'Val1', 'Val2'], data=[['id0', 10, 20], ['id0', 11, 19], ['id1', 5, 5], ['id1', 1, 1], ['id1', 2, 4]]) # 分组滑动计算相邻两行均值 result = df.groupby('ID', as_index=False).apply( lambda group: group[['Val1', 'Val2']].rolling(2).mean().dropna().reset_index(drop=True) ).reset_index(level=0) # 生成带序号后缀的新ID result['ID'] = result['ID'] + '_' + (result.groupby('ID').cumcount() + 1).astype(str) # 调整列顺序、重置索引得到最终结果 result = result[['ID', 'Val1', 'Val2']].reset_index(drop=True)
逻辑说明
- 所有操作均为pandas内置向量化运算,无手动遍历逻辑,性能远高于自定义循环实现,数据量越大优势越明显
- 滑动窗口大小固定为2,计算结果自动对应每相邻两行的均值,丢弃首个空值行后刚好匹配所有有效配对
- 用
cumcount生成同ID下的配对序号,拼接后直接得到符合要求的新ID字段
运行后输出的result和预期结果完全一致。
内容的提问来源于stack exchange,提问作者Eugene Zinder
相关产品推荐
相关产品推荐

