我正在研究熊猫数据框中的十项全能数据集。我用以下代码计算了每年的异常值。但是,我在从熊猫中过滤计算值时遇到问题。
数据集文件(已转置)的屏幕快照: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小于错误值,则新列行应为错误。诀窍是好值和坏值会随着时间而改变。
答案 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