【问题标题】:pandas - extract values greater than a threshold from a columnpandas - 从列中提取大于阈值的值
【发布时间】:2019-03-19 05:49:44
【问题描述】:

我有一个 DataFrame - 它的快照如下所示:

我正在尝试获取所有大于 70 的 math_scorereading_score 值,这些值按 school_name 分组。

所以我的最终结果应该是这样的:

我正在尝试计算通过math_scorereading_score 的学生的百分比,即分数 > 70 的百分比。

对我如何解决这个问题有任何帮助吗?

这是我尝试过的:

school_data_grouped = school_data_complete.groupby('school_name')
passing_math_score = school_data_grouped.loc[(school_data_grouped['math_score'] >= 70)]

我收到一个错误提示:

AttributeError: Cannot access callable attribute 'loc' of 'DataFrameGroupBy' objects, try using the 'apply' method

我能做些什么来实现这一目标?非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 请不要将数据发布为图像,我们无法复制它们,因此无法重现问题。请以文本形式发布所有代码和数据。谢谢
  • @anky_91,数据是 CSV 格式,所以我发布了截图
  • 您可以随时复制或创建 5 行示例数据来重现您的问题。用户会发现执行代码并帮助您很容易。 :) 检查this

标签: python pandas group-by


【解决方案1】:

您可以为每个学生是否通过创建一个列,例如:

school_data['passed_math'] = school_data['math_score'] >= 70
school_data['passed_both'] = (school_data['math_score'] >= 70) & (school_data['reading_score'] >= 70)

然后您可以使用groupby 获取学校的通过率:

pass_rate = school_data.groupby('school_name').mean()

【讨论】:

  • 过滤后得到 pandas.core.series.Series。并且在该系列上应用 groupby 并没有那么有用。
【解决方案2】:

您需要先过滤 math_score 和 reading_score 然后应用 groupby,因为 groupby 不返回 Dataframe。

为了解决您的问题,我从这个链接获得了数据

数据

https://www.kaggle.com/aljarah/xAPI-Edu-Data/

我更改了列名。

代码

import pandas as pd 
school_data_df  = pd.read_csv('xAPI-Edu-Data 2.csv')
school_data_df.head()

df_70_math_score = school_data_df[school_data_df.math_score > 70]
df_70_reading_math_score = df_70_math_score[df_70_math_score.reading_score >70]
df_70_reading_math_score.head()

grouped_grade = df_70_reading_math_score.groupby('GradeID') 

您可以从此 groupby_object 'grouped_grade' 生成任何统计信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多