如何在DataFrame中过滤偏离初始体重超10%的测量值及时间维度筛选
过滤DataFrame中体重异常值的实现方案
需求说明
- 按
ID分组,排除该ID下与初始体重(对应ID最早测量日期的体重)偏差超过10%的记录 - 拓展需求:添加时间维度过滤,排除**指定时间段(如10天内)**与初始体重偏差超10%的记录(时间段外的偏差记录可保留)
原始数据
ID Weight Date 1 200 1/1 1 201 1/2 1 199 1/3 1 50 1/4 2 170 1/1 2 177 1/2 2 40 1/3 2 175 1/4
目标结果
ID Weight Date 1 200 1/1 1 201 1/2 1 199 1/3 2 170 1/1 2 177 1/2 2 175 1/4
实现方案
基础版本:仅基于体重偏差过滤
核心逻辑是按ID分组获取初始体重,再筛选体重处于初始体重90%-110%范围内的记录。
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'ID': [1, 1, 1, 1, 2, 2, 2, 2], 'Weight': [200, 201, 199, 50, 170, 177, 40, 175], 'Date': ['1/1', '1/2', '1/3', '1/4', '1/1', '1/2', '1/3', '1/4'] }) # 将日期转为datetime类型,确保能正确识别初始测量日期 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d') # 按ID分组,提取每个ID的初始体重(最早日期对应的体重) initial_weights = df.groupby('ID')\ .apply(lambda x: x.loc[x['Date'].idxmin(), 'Weight'])\ .rename('Initial_Weight') # 合并初始体重到原表 df = df.merge(initial_weights, on='ID') # 过滤体重在初始体重90%-110%范围内的记录 filtered_df = df[(df['Weight'] >= df['Initial_Weight'] * 0.9) & (df['Weight'] <= df['Initial_Weight'] * 1.1)] # 整理结果,保留原列并排序 filtered_df = filtered_df[['ID', 'Weight', 'Date']]\ .sort_values(by=['ID', 'Date'])\ .reset_index(drop=True) print(filtered_df)
运行后得到的结果与目标DataFrame完全一致,自动排除了ID1的50和ID2的40这两个异常值。
拓展版本:添加时间维度过滤
如果需要仅对初始日期后指定时间段内的记录应用体重偏差过滤,超出时间段的记录无论偏差多少都保留,可以按以下逻辑实现:
# 定义允许的时间窗口(单位:天) time_window = 10 # 提取每个ID的初始日期 initial_dates = df.groupby('ID')['Date'].min().rename('Initial_Date') df = df.merge(initial_dates, on='ID') # 计算每条记录与初始日期的间隔天数 df['Days_Since_Initial'] = (df['Date'] - df['Initial_Date']).dt.days # 过滤条件:要么超出时间窗口,要么在窗口内且体重符合偏差要求 filtered_df_time = df[ (df['Days_Since_Initial'] > time_window) | ((df['Days_Since_Initial'] <= time_window) & df['Weight'].between(df['Initial_Weight'] * 0.9, df['Initial_Weight'] * 1.1)) ] # 整理结果 filtered_df_time = filtered_df_time[['ID', 'Weight', 'Date']]\ .sort_values(by=['ID', 'Date'])\ .reset_index(drop=True) print(filtered_df_time)
该逻辑的核心是:仅对初始测量10天内的记录做体重偏差校验,10天后的记录即使体重波动大也会被保留,适用于长期跟踪中允许体重自然变化的场景。
内容的提问来源于stack exchange,提问作者Anas Alkanderi
相关产品推荐
相关产品推荐

