将与不同值关联的重复条目转换为包含这些值列表的一项?

时间:2019-08-02 19:21:01

标签: python pandas

我不确定该如何命名。

假设以下Pandas DataFrame:

    Student ID      Class   
1   John    99124   Biology
2   John    99124   History
3   John    99124   Geometry
4   Sarah   74323   Physics
5   Sarah   74323   Geography
6   Sarah   74323   Algebra
7   Alex    80045   Trigonometry
8   Alex    80045   Economics
9   Alex    80045   French

我想通过创建每个学生参加的课程列表,然后将其放在“课程”列中来减少此DataFrame中的行数。这是我想要的输出:

    Student ID      Class
1   John    99124   ["Biology","History","Geometry"]
2   Sarah   74323   ["Physics","Geography","Algebra"]
3   Alex    80045   ["Trigonometry","Economics","French"]

我正在使用一个大型DataFrame,它的结构不如本例所示。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

您需要分别在StudentIDgroupby,然后使用agg

df.groupby(['Student', 'ID'], as_index=False).agg({'Class': list})

输出:

  Student     ID                              Class
0    Alex  80045  [Trigonometry, Economics, French]
1    John  99124       [Biology, History, Geometry]
2   Sarah  74323      [Physics, Geography, Algebra]

答案 1 :(得分:1)

df.groupby('ID')['Class'].apply(list)

答案 2 :(得分:1)

借助一些帮助,让我们看看 Apply multiple functions to multiple groupby columns

您可以编写类似

的内容
df= df.groupby('student').agg({'id':'max', 'Class': lambda x: x.tolist()})

希望它会有所帮助,朱利奥

答案 3 :(得分:1)

尝试如下

df.groupby(['Student', 'ID'],as_index=False).agg(lambda x:','.join('"'+x+'"'))