【问题标题】:Grouping by ID choosing highest values in columns from same ID按 ID 分组,从相同 ID 的列中选择最高值
【发布时间】:2021-11-23 18:28:28
【问题描述】:

我在计算一些期末考试成绩时遇到了问题。我需要按学生分组,只获取每个学生每列中的最高值。

作为 DF 数据框:

data = {'Students': ['Student1', 'Student1', 'Student1', 'Student2','Student2','Studen3'], 
        'Result1': [2, 4, 5, 8, 2, 5],
        'Result2': [5, 3, 2, 8, 5, 5],
        'Result3': [7, 5, 7, 3, 8, 9]}
df = pd.DataFrame(data)

    Students    Result1     Result2     Result3
0   Student1    2   5   7
1   Student1    4   3   5
2   Student1    5   2   7
3   Student2    8   8   3
4   Student2    2   5   8
5   Studen3     5   5   9

我需要生成一个 DF,为每个学生在每个结果中选择较高的分数。

所以,最终的 DF 应该是这样的:

    Students    Result1     Result2     Result3
0   Student1    5   5   7
1   Student2    8   8   8
2   Student3    5   5   9

有什么帮助吗?

【问题讨论】:

  • df.groupby('Students').max()?
  • 看起来像df.groupby('Students', as_index=False, sort=False).agg('max')
  • 是的!这很简单!不知道我在想什么...jeje 谢谢!

标签: python pandas pandas-groupby


【解决方案1】:

可以使用简单的组迭代来生成数据框:

df2 = pd.DataFrame(columns=('Student', 'res1', 'res2', 'res3'))

for s in df.Students.unique():
    stdf = df[df["Students"]==s]
    df2 = df2.append({'Student':s,'res1':max(stdf.Result1),'res2':max(stdf.Result2),
                      'res3':max(stdf.Result3)}, ignore_index=True)

【讨论】:

    【解决方案2】:

     打电话给groupby('Students').max()

    >>> df.groupby('Students').max()
    
               Result1  Result2  Result3
    Students
    Student1        5        5        7
    Student2        8        8        8
    Student3        5        5        9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2017-11-06
      相关资源
      最近更新 更多