如何计算DataFrame每行非NA值平均步数并删除超阈值的异常行
Pandas用户访问路径DataFrame精简解决方案
实现逻辑
- 第一步:计算每个session的有效步数:按行统计非NA值的数量
- 第二步:识别并排除步数异常偏高的样本,避免异常值拉高平均值
- 第三步:基于正常样本计算平均有效步数
- 第四步:筛选保留有效步数不超过平均值的行,完成数据表精简
代码实现
import pandas as pd # 1. 计算每行的有效步数(非NA值数量) df['valid_steps'] = df.count(axis=1) # 2. 用IQR法则识别异常值,你也可以根据业务需求替换为固定阈值(比如步数>100判定为异常) q1 = df['valid_steps'].quantile(0.25) q3 = df['valid_steps'].quantile(0.75) iqr = q3 - q1 # 异常值判定边界:超过Q3+1.5*IQR判定为步数偏高的异常值 upper_abnormal_bound = q3 + 1.5 * iqr # 3. 排除异常值后计算平均步数 normal_sample = df[df['valid_steps'] <= upper_abnormal_bound] avg_valid_steps = normal_sample['valid_steps'].mean() # 4. 筛选保留符合要求的行,删除临时的有效步数字段 df_slim = df[df['valid_steps'] <= avg_valid_steps].drop(columns=['valid_steps'])
调整说明
如果你的业务场景有明确的异常判定规则,可以直接替换第二步的异常值逻辑,比如直接设置upper_abnormal_bound = 100,过滤掉所有步数超过100的会话即可。
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

