Python 用中位值替换异常值

Python 用中位值替换异常值,python,pandas,dataframe,outliers,Python,Pandas,Dataframe,Outliers,我想和熊猫做点什么 我完成了从数据框中分离离群值的工作,但我不知道如何将离群值的年龄设置为中值。。。 我能得到一些帮助吗 这是我的密码 users = pd.read_table('user.txt', sep='|', index_col='user_id') print(users) 我可以使用什么方法?我认为您需要: 哦,太好了!我用了另一种方式用户年龄离群值固定['age']=np。其中(用户年龄['outlier'],用户年龄['Median'],用户年龄['age'])有效!谢谢,

我想和熊猫做点什么

我完成了从数据框中分离离群值的工作,但我不知道如何将离群值的年龄设置为中值。。。 我能得到一些帮助吗

这是我的密码

users = pd.read_table('user.txt', sep='|', index_col='user_id')
print(users)
我可以使用什么方法?

我认为您需要:


哦,太好了!我用了另一种方式<代码>用户年龄离群值固定['age']=np。其中(用户年龄['outlier'],用户年龄['Median'],用户年龄['age'])有效!谢谢,祝你今天愉快。
         age gender occupation zip_code
user_id                                
1         24      M     artist    85711
2         53      F     artist    94043
3         23      M   educator    32067
4         24      M     artist    43537
5         33      F     artist    15213
...      ...    ...        ...      ...
939       26      F    student    33319
940       32      M   engineer    02215
941       20      M    student    97229
942       48      F   educator    78209
943       22      M    student    77841

[943 rows x 4 columns]
users_age = users.reset_index()[['occupation','age']]
users_age_grouped = users_age.groupby('occupation')
users_age['Lower'] = users_age_grouped['age'].transform(
    lambda x: x.quantile(q=.25) - 1.5 * (x.quantile(q=.75) - x.quantile(q=.25)))
users_age['Median'] = users_age_grouped['age'].transform(lambda x: x.quantile(q=.5))
users_age['Upper'] = users_age_grouped['age'].transform(
    lambda x: x.quantile(q=.75) + 1.5 * (x.quantile(q=.75) - x.quantile(q=.25)))

users_age['Outlier'] = (users_age['Lower'] > users_age['age']) |\
    (users_age['Upper'] < users_age['age'])

users_age_outlier = users_age[users_age['Outlier']]
users_age_wo_outlier = users_age[users_age['Outlier'] == False]

print(users_age_outlier)
    occupation  age  Lower  Median  Upper  Outlier
29     student    7    8.5      22   36.5     True
38     student   41    8.5      22   36.5     True
187    student   42    8.5      22   36.5     True
210     artist   66    3.5      31   63.5     True
417    student   55    8.5      22   36.5     True
422     artist   64    3.5      31   63.5     True
558   engineer   69    6.5      36   66.5     True
564    student   40    8.5      22   36.5     True
766   engineer   70    6.5      36   66.5     True
802   engineer   70    6.5      36   66.5     True
838    student   38    8.5      22   36.5     True
860    student   38    8.5      22   36.5     True
914    student   50    8.5      22   36.5     True
925    student   49    8.5      22   36.5     True
mask = users_age['age'].between(users_age['Lower'], users_age['Upper'], inclusive=False)

users_age['age'] = np.where(mask, users_age['Median'], users_age['age'])