基于列表的熊猫数据框过滤

时间:2019-12-12 21:52:01

标签: python pandas

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

数据集文件(已转置)的屏幕快照:Dataset

离群值箱图的屏幕截图:Boxplot

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小于错误值,则新列行应为错误。诀窍是好值和坏值会随着时间而改变。

1 个答案:

答案 0 :(得分:0)

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

但是,如果我正确理解您的问题,那么您希望将当年处于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