首页 > 解决方案 > 基于列表的 Pandas Dataframe 过滤

问题描述

我正在处理 pandas 数据框中的十项全能数据集。我在以下代码中计算了每年的异常值。但是,我在从 pandas 过滤计算值时遇到问题。

数据集文件截图(转置):Dataset

异常值箱线图的屏幕截图:箱线

good = []
bad = []

for item in df['yearEvent'].unique(): 
    value=df[df['yearEvent']==item].Totalpoints
    a=value.quantile(0.25)
    b=value.quantile(0.75)
    c=b-a        
    good.append(b+1.5*c)
    bad.append(a-1.5*c)    

基本上,我想创建一个新列,其值的好坏取决于数据框中的 Totalpoints。如果 Totalpoints 小于错误值,则新列行应该是错误的。诀窍是好和坏的价值观会随着时间的推移而变化。

标签: pythonpandas

解决方案


您的问题非常模糊,提供数据集的屏幕截图并不是最好的主意。最好将其作为文本包含在内,或链接到实际数据。

但是,如果我正确理解了您的问题,您希望将运动员归类为好,如果他们在当年的 0.25 分位数。你可以简单地做到这一点:

df = pd.DataFrame(dict(
  year=[1990, 1990, 1990, 1991, 1991, 1991],
  points=[1234, 1243, 1423, 4123, 4132, 4312],
))
good = []
for year in df.year.unique():
  year_df = df[df.year == year]
  cutoff = year_df.points.quantile(0.25)
  good.extend(year_df.points > cutoff)
df['good'] = good

这将产生这个数据框:

   year  points   good
0  1990    1234  False
1  1990    1243   True
2  1990    1423   True
3  1991    4123  False
4  1991    4132   True
5  1991    4312   True

推荐阅读