You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于自定义函数索引Pandas DataFrame以提取异常值?

解决提取原DataFrame异常值对应行的问题

情况1:分组后的HOSIERY_df保留了原DataFrame的索引

如果你的HOSIERY_df是通过groupby('SKUGROUP').get_group('HOSIERY')得到的(未重置索引),它的索引和原DataFrame完全对应,直接用找到的异常值索引去原表取行即可:

# 假设原DataFrame名为main_df,find_outliers_IQR返回的异常值索引是outlier_indices
outlier_full_rows = main_df.loc[outlier_indices]

情况2:分组后的HOSIERY_df重置了索引

如果分组时用了reset_index()导致索引被重置,需要先从HOSIERY_df里提取原DataFrame的索引,再去原表取数:

  1. 分组时保留原索引列(不要设置drop=True):
HOSIERY_df = main_df.groupby('SKUGROUP').get_group('HOSIERY').reset_index(drop=False)
  1. 从异常值索引对应的行中提取原表索引:
original_outlier_indices = HOSIERY_df.loc[outlier_indices, 'index']
  1. 用原索引获取原DataFrame的完整行:
outlier_full_rows = main_df.loc[original_outlier_indices]

更稳妥的替代方案:直接在原表筛选分组后找异常

绕过分组后索引混乱的问题,先在原DataFrame里筛选出SKUGROUP为HOSIERY的子集,再找异常值,子集的索引和原表完全对应:

# 先筛选HOSIERY分组的行
hosiery_subset = main_df[main_df['SKUGROUP'] == 'HOSIERY']
# 找VOLUME列的异常值位置索引(子集的位置索引,非原表索引)
outlier_positions = find_outliers_IQR(hosiery_subset['VOLUME'])
# 通过子集iloc拿到原表索引,再提取原表完整行
outlier_full_rows = main_df.loc[hosiery_subset.iloc[outlier_positions].index]

内容的提问来源于stack exchange,提问作者Cyprus_Knolls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:31:00