用pandas识别统计异常值:groupby和individual columns

2024-09-27 17:51:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试了解如何识别统计异常值,我将发送到电子表格。我需要按索引对行进行分组,然后找到特定列的stdev,超过stdev的任何内容都将用于填充电子表格。在

df = pandas.DataFrame({'Sex': ['M','M','M','F','F','F','F'], 'Age': [33,42,19,64,12,30,32], 'Height': ['163','167','184','164','162','158','160'],})

使用这样的数据集,我想按性别分组,然后找到超过年龄或身高标准差的条目。我见过的大多数例子都是处理整个数据集的stdev,而不是按列分解。这里会有额外的列,比如state,所以我不需要每一列的stdev,只需要特定的列。在

查找输出以仅包含在任一列中标识为统计异常值的行的数据。例如:

^{pr2}$

假设64岁超过男子身高标准,184厘米身高超过男子身高标准


Tags: 数据内容dataframepandasdfage标准电子表格
1条回答
网友
1楼 · 发布于 2024-09-27 17:51:00

首先,将高度从字符串转换为值。在

df['Height'] = df['Height'].astype(float)

然后,您需要使用transformSex分组,以创建一个布尔指示符标记,如果AgeHeight的任何是组内的统计异常值。在

^{pr2}$

现在筛选包含任何异常值的行:

>>> df[outliers.any(axis=1)]
   Age  Height Sex
2   19     184   M
3   64     164   F
4   12     162   F
5   30     158   F

如果您只关心分布的上边(即值>平均值+2sds),那么只需删除.abs(),即lambda group: (group - group.mean()).div(group.std()).abs() > stds

相关问题 更多 >

    热门问题