oly*_*ska 1 python apply pandas pandas-groupby
我想识别数据帧中每组值的异常值,并返回一个数据帧,该数据帧的每一行包含包含 True/False 的列。
data = {'Group':['A', 'A', 'A', 'B', 'B', 'B'], 'Age':[20, 21, 19, 18, 2, 17]}
df = pd.DataFrame(data)
def flag_outlier(x):
lower_limit = np.mean(x) - np.std(x) * 3
upper_limit = np.mean(x) + np.std(x) * 3
for i in x:
if i > upper_limit or i < lower_limit:
return True
df['Flag'] = df.groupby('Group')['Age'].apply(flag_outlier)
Run Code Online (Sandbox Code Playgroud)
此代码返回 NaN 列,如何修复此函数?
这篇文章 将函数应用于 groupby 函数类似,但我无法弄清楚。
非常感谢,
您可以使用groupby().transformgetmean和stdby group,然后between查找异常值:
groups = df.groupby('Group')
means = groups.Age.transform('mean')
stds = groups.Age.transform('std')
df['Flag'] = df.Age.between(means-stds*3, means+stds*3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |