从每个列表中提取第 n 个元素并将其存储在新列中

Mar*_*edy 2 python list pandas jupyter-notebook

我有一个数据框(称为“df”),其中包含一个名为“成绩”的列。此列包含成绩列表。此列中的数据属于“对象”类型。

    student_id    grades
0       11      [A,A,B,A]
1       12      [B,B,B,C]
2       13      [C,C,D,B]
3       21      [B,A,C,B] 
Run Code Online (Sandbox Code Playgroud)

我希望创建一个名为“maths_grades”的新列,它将存储成绩列表中的第三个元素。

示例输出:

      student_id   grades    maths_grade
0       11      [A,A,B,A]        B
1       12      [B,B,B,C]        B
2       13      [C,C,D,B]        D
3       21      [B,A,C,B]        C  
Run Code Online (Sandbox Code Playgroud)

最好的办法是什么?

jez*_*ael 5

使用索引str,因为使用可迭代对象:

df['maths_grade'] = df['grades'].str[2]
Run Code Online (Sandbox Code Playgroud)

或者如果没有缺失值和性能很重要,则列出理解:

df['maths_grade'] = [x[2] for x in df['grades']]
Run Code Online (Sandbox Code Playgroud)