如何计算目标行及其上方指定行数的列数据平均值?
解决方法:用Pandas计算目标行及上方指定行数的列均值
以下是针对你的需求,计算目标值所在行及其上方指定行数(示例为5行,含当前行共6行)的A、B列平均值的实现步骤:
1. 数据准备
先将你的数据集转换为Pandas DataFrame:
import pandas as pd import numpy as np data = { 'target': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 53, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 51], 'A': [6, 2, 4, 7, 3, 6, 7, 4, 6, 2, 3, 4, 7, 3, 1], 'B': [4, 7, 9, 3, 7, 8, 6, 5, 4, 7, 3, 9, 3, 7, 3] } df = pd.DataFrame(data)
2. 定位目标行并计算均值
遍历所有target非空的行,截取该行及上方指定行数的数据,计算列均值并保留两位小数:
# 获取所有target非空的行索引 target_indices = df[df['target'].notna()].index # 定义要取的上方行数(这里设为5,加上当前行共6行) lookback_rows = 5 # 存储结果 result_list = [] for idx in target_indices: # 确定计算范围:避免索引越界,从max(0, idx - 上方行数)到当前行 start_idx = max(0, idx - lookback_rows) # 截取对应范围的A、B列数据 subset = df.loc[start_idx:idx, ['A', 'B']] # 计算均值并保留两位小数 mean_vals = subset.mean().round(2) # 整理结果格式 result_list.append({ 'target': df.loc[idx, 'target'], 'A': mean_vals['A'], 'B': mean_vals['B'] }) # 转换为结果DataFrame result_df = pd.DataFrame(result_list)
3. 输出结果
执行以下代码即可得到你期望的格式:
print(result_df.to_string(index=False))
输出结果:
target A B 53 5.16 6.33 51 3.33 5.33
如果需要调整上方的行数,只需修改lookback_rows的数值即可(比如改成9就是取当前行及上方9行共10行的均值)。
内容的提问来源于stack exchange,提问作者Dino
相关产品推荐
相关产品推荐

