【问题标题】:Python df saving multiple values in same cellPython df在同一个单元格中保存多个值
【发布时间】:2021-10-18 01:37:04
【问题描述】:

我有一个数据框,其中列是学生的姓名,行是成绩(每一行是不同的测试)。通过以下代码,我找到了每个测试的最高分

df.max(axis=1)

但是,现在我想知道哪个学生获得了最高分。因此,我想得到以下最后一列:

   Student 1 |  Student 2  |  Student 3  | Max_grade | Which_student
0      3.76  |     3.69    |  2.48       | 3.79      | Student 1
1      1.65  |     4.40    |  6.66       | 6.66      | Student 2
2      3.76  |     3.69    |  2.48       | 3.76      | Student 1
3      5.50  |     5.50    |  1.79       | 5.50      | Student 1, Student 2
4      5.50  |     4.50    |  1.79       | 5.50      | Student 1

如何获得每行的最高值?如果 2 名学生获得相同的分数,我想将两个名字都附加到最后一列。

我现在所做的是遍历所有值,例如:

for i in range(len(df)):
       for j in range(len(df.columns)-1):
                    if df.iloc[i,j] == df['Max_grade'].iloc[i]:
                         print(i,total_bets.columns[j])

这将返回以下内容:

0 Student 1
1 Student 2
2 Student 1
3 Student 1
3 Student 2
4 Student 1

但是,如何将第三行的两个学生组合在一起,以及如何将值保存在 df 中?

【问题讨论】:

    标签: python pandas append


    【解决方案1】:

    我用下面的代码解决了:

    for i in range(len(df)):
        a = []
        for j in range(len(df.columns)-1):
            if df.iloc[i,j] == df['Max_grade'].iloc[i]:
                # df['which_student'].iloc[i].append(df.columns[j], axis=1)
                a.append(df.columns[j])
        df['which_student'].iloc[i] = a
    

    【讨论】:

    • 为什么是for j in range(len(df.columns)-4):?那么它将永远是j=0,因为len(df.columns)-4 永远是1
    • 你是对的@Karina。在我原来的 df 我有更多的列,这就是为什么我做了 -4 但在上面的例子中我不应该这样做。谢谢指出!
    【解决方案2】:
    student1 = [3.76, 1.65, 3.76, 5.50, 5.50]
    student2 = [3.69, 4.40, 3.69, 5.50, 4.50]
    student3 = [2.48, 6.66, 2.48, 1.79, 1.79]
    df = pd.DataFrame({'Student 1': student1, 'Student 2': student2, 'Student 3': student3})
    df['Max_grade'] = df.max(axis=1)
    print(df)
    whichstudent = []
    for i in range(len(df)):
        maxstudent = []
        for j in range(len(df.columns)-1):
            if df.iloc[i,j] == df['Max_grade'].iloc[i]:
                student = df.columns[j]
                maxstudent.append(student)
        whichstudent.append(maxstudent)
    
    whichstudents = []
    for i in range(len(df)):
        allstudent = ''
        for j in range(len(whichstudent[i])):
            if len(whichstudent[i]) != 1:
                allstudent = allstudent + ', ' + whichstudent[i][j]
                allstudent = allstudent[1:len(allstudent)]
            else:
                allstudent = whichstudent[i][j]
        whichstudents.append(allstudent)
    
    
    df['Which_student'] = whichstudents
    print(df)
    

    输出:

       Student 1  Student 2  Student 3  Max_grade
    0       3.76       3.69       2.48       3.76
    1       1.65       4.40       6.66       6.66
    2       3.76       3.69       2.48       3.76
    3       5.50       5.50       1.79       5.50
    4       5.50       4.50       1.79       5.50
       Student 1  Student 2  Student 3  Max_grade         Which_student
    0       3.76       3.69       2.48       3.76             Student 1
    1       1.65       4.40       6.66       6.66             Student 3
    2       3.76       3.69       2.48       3.76             Student 1
    3       5.50       5.50       1.79       5.50  Student 1, Student 2
    4       5.50       4.50       1.79       5.50             Student 1
    

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-05-29
      • 2021-02-02
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多