gpt4 book ai didi

python - 在Python中将小于某个阈值的相对频率标记为异常值

转载 作者:行者123 更新时间:2023-12-01 07:33:38 25 4
gpt4 key购买 nike

我有一个包含字符变量的数据框。我的任务是计算每个变量的相对频率并标记每个值(相应的新标志变量是二进制的),其中相对频率小于某个阈值。

到目前为止,我尝试了这个(它适用于一个变量,我不确定如何在循环中完成此操作,或者是否有更好、更有效的解决方案来解决我的问题

import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Alice ', 'Barbara', 'Carol', 'Henry','ds','sed'],
'Sex' : ['M','F','F','F','M','f','m'],
'Age' : [14,13,13,14,12,13,14],
'Weight': [69.0, 56.5, 65.3, 62.8, 65.3,67,69],
'Height': [112.5, 84.0, 98.0, 102.5, 102.5,101,105.3]}

cl = pd.DataFrame(data)

# this is just to test on char variables
cl1=cl.drop(['Age','Height','Weight'],axis=1).copy()

x=(cl.Sex.value_counts()/cl.shape[0]*100).to_frame().reset_index()
x.columns = ['Sex', 'Freq']

pd.merge(cl, x, on='Sex', how ='left')

我也尝试过我的真实数据集 - 但它显示 NaN(但是,我现在知道原因了)

for i in range(len(cat_data.columns)):
cat_data[str(cat_data.columns[i])+str('_flag')] = (cat_data.iloc[:,i].value_counts()/cat_data.shape[0]*100).sort_values(ascending=False)

我需要输出数据集中每个 char 变量的标志变量,例如 cl 将具有 sex_flag 和 name_flag 或age_flag(我认为它是一个 char 变量)

期望的输出如下:

cat_data 相当于上面代码中的 cl1。所需的输出将类似于:

enter image description here稍后需要删除 AGE_freq 列

最佳答案

您需要代码来获取频率,然后将阈值设置为 25%。

freq = cl.apply(lambda x: x.map(x.value_counts(normalize=True).mul(100).round(2).to_dict()))
freq = pd.DataFrame(np.where(freq>25, 1, 0), columns=freq.columns)
freq.columns = [x+'_flag' for x in freq.columns]
pd.concat([cl, freq],1)

输出:

       Name Sex  Age  Weight  Height  Name_flag  Sex_flag  Age_flag  Weight_flag  Height_flag
0 Alice M 14 69.0 112.5 0 1 1 1 0
1 Alice F 13 56.5 84.0 0 1 1 0 0
2 Barbara F 13 65.3 98.0 0 1 1 1 0
3 Carol F 14 62.8 102.5 0 1 1 0 1
4 Henry M 12 65.3 102.5 0 1 0 1 1
5 ds f 13 67.0 101.0 0 0 1 0 0
6 sed m 14 69.0 105.3 0 0 1 1 0

关于python - 在Python中将小于某个阈值的相对频率标记为异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57099330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com