python - 基于列表的 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 小于错误值,则新列行应该是错误的。诀窍是好和坏的价值观会随着时间的推移而变化。
解决方案
您的问题非常模糊,提供数据集的屏幕截图并不是最好的主意。最好将其作为文本包含在内,或链接到实际数据。
但是,如果我正确理解了您的问题,您希望将运动员归类为好,如果他们在当年的 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
推荐阅读
- linux - 不懂 Linux 命令“排序”
- scala - 我如何在 kantan 中创建自定义 CellEncoder
- youtube-data-api - 为什么我在 YouTube 数据 API v3 中收到 403 错误?
- parsing - BeautifulSoup - 所有href链接似乎都没有被提取
- javascript - 尝试使用反应路由器在反应中重定向
- c - ESC[2J 和 CLS 在编程上有何不同,我将如何使用 Windows API 在 C 中实现它?
- javascript - 如何使用 Mapbox 在单个页面中显示两个地图
- python-3.x - TensorFlow 中的多输入建模,带有生成器
- git - 在 GitHub 操作工作流中确定合并推送的源分支名称
- javascript - 在 JWPlayer 上禁用键盘快捷键