Python如何对DataFrame每列指定行按Excel逻辑计算标准差
实现方案
前提说明
我们先做通用场景的约定,你可以根据自己的实际数据调整规则:
- 你已提前生成和目标DataFrame
df索引对齐的布尔掩码is_highlight,取值为True的行对应Excel中的高亮行 - 偏移规则默认设定为:第i列(列索引从0开始计数)的统计起始行相较第0列向下偏移i位,仅统计偏移后范围内的高亮行数据
循环实现代码
import pandas as pd # --------------- 替换为你自己的实际数据 --------------- # 示例DataFrame df = pd.DataFrame({ 'col1': [1,2,3,4,5,6,7], 'col2': [2,3,4,5,6,7,8], 'col3': [3,4,5,6,7,8,9], 'col4': [4,5,6,7,8,9,10] }) # 示例高亮行掩码:第1、2、4、5行为高亮行 is_highlight = pd.Series([False, True, True, False, True, True, False], index=df.index) # ----------------------------------------------------- # 初始化存储标准差结果的Series std_results = pd.Series(dtype='float64', index=df.columns) # 遍历所有列完成计算 for col_idx, col_name in enumerate(df.columns): # 生成当前列的有效行筛选规则:行索引>=列索引(实现向下偏移)+ 是高亮行 valid_row_mask = (df.index >= col_idx) & is_highlight # 计算标准差,ddof参数可对齐Excel逻辑:ddof=1对应样本标准差STDEV.S,ddof=0对应总体标准差STDEV.P std_results[col_name] = df.loc[valid_row_mask, col_name].std(ddof=1) # 输出结果 print(std_results)
规则调整说明
- 如果需要固定窗口大小滑动,比如每列仅统计偏移后的连续3行,可以把筛选规则修改为:
valid_row_mask = (df.index >= col_idx) & (df.index < col_idx + 3) & is_highlight - 如果你的偏移方向或步长有特殊要求,只要调整
df.index的判断逻辑即可 - 如果高亮行是按其他规则(比如数值大于阈值、属于特定分组)筛选的,修改
is_highlight的生成逻辑即可
内容的提问来源于stack exchange,提问作者shrimpers
相关产品推荐
相关产品推荐

