[英]How to access values in another column of a panda dataframe
假设我有一个数据框:
d = pd.DataFrame({'Salary' : pd.Series([1, 20000, 5, 1000, 3000],
index = ['Joe', 'Steph', 'Jared', 'Oliver', 'Gaby']),
'Sex' : pd.Series([0, 1, 0, 0, 1],
index=['Joe', 'Steph', 'Jared', 'Oliver', 'Gaby'])})
Salary Sex
Joe 1 0
Steph 20000 1
Jared 5 0
Oliver 7000 0
Gaby 3000 1
我编写了一个函数,该函数以列名作为参数,计算值的四分位数范围,并根据该值返回异常值的数量。 如果我还希望该函数返回薪金离群的女性人数,我如何访问“性别”列以检查离群薪水的相应“性别”值?
这是我的离群值函数:
def iqr_outliers(num_df, column):
nan_count = 0
for value in column:
if value == 'NaN':
nan_count += 1
cleaned_column = [x for x in column if str(x) != "NaN"]
iqr = np.subtract(*np.percentile(cleaned_column, [75, 25]))
upper = np.percentile(cleaned_column, 75) + 1.5 * iqr
lower = np.percentile(cleaned_column, 25) - 1.5 * iqr
outliers = []
lows = 0
highs = 0
fem_outliers= 0
for value in cleaned_column:
if value < lower:
lows += 1
outliers.append(value)
elif value > upper:
highs += 1
outliers.append(value)
return ({"Number of low outliers": lows, "Number of high outliers": highs, "Number of NaNs": nan_count})
我想在那些if语句中的某处查看同一行的'sex'值,但是我真的不知道如何访问它。
注意,您可以使用percentile
计算四分percentile
:
In [21]: d
Out[21]:
Salary Sex
Joe 1 0
Steph 20000 1
Jared 5 0
Oliver 1000 0
Gaby 3000 1
In [22]: iqr = d.Salary.quantile([.25,.75]).values
In [23]: iqr
Out[23]: array([ 5., 3000.])
然后,您可以使用elementwise布尔操作:
In [24]: (d.Salary < iqr[0]) | (d.Salary > iqr[1])
Out[24]:
Joe True
Steph True
Jared False
Oliver False
Gaby False
Name: Salary, dtype: bool
最后,您可以使用该结果在整个数据框中进行选择:
In [26]: d[(d.Salary < iqr[0]) | (d.Salary > iqr[1])]
Out[26]:
Salary Sex
Joe 1 0
Steph 20000 1
或类似的东西。 我不记得有关图基离群值的细节。 但是,使用上面说明的方法应该很容易处理。
In [40]: IQR = iqr[1] - iqr[0]
In [41]: upper = 1.5*IQR+iqr[1]
In [42]: lower = iqr[0] - 1.5*IQR
In [43]: (d.Salary < lower) | (d.Salary > upper)
Out[43]:
Joe False
Steph True
Jared False
Oliver False
Gaby False
Name: Salary, dtype: bool
In [44]: d[(d.Salary < lower) | (d.Salary > upper)]
Out[44]:
Salary Sex
Steph 20000 1
要获取女性人数,您可以使用sum
In [46]: d[(d.Salary < lower) | (d.Salary > upper)]['Sex'].sum()
Out[46]: 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.