Python 将与不同值关联的重复条目转换为具有这些值列表的一个条目?

Python 将与不同值关联的重复条目转换为具有这些值列表的一个条目?,python,pandas,Python,Pandas,我不知道如何命名这个 假设以下数据帧: 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 Trigonomet

我不知道如何命名这个

假设以下数据帧:

    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
我希望通过创建每个学生正在学习的课程列表,然后将其放入“类”列,来减少此数据框中的行数。这是我想要的输出:

    Student ID      Class
1   John    99124   ["Biology","History","Geometry"]
2   Sarah   74323   ["Physics","Geography","Algebra"]
3   Alex    80045   ["Trigonometry","Economics","French"]
我使用的是一个大型数据帧,它的组织方式没有这个示例那么好。非常感谢您的帮助。

您需要打开
学生
ID
,然后使用

输出:

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

让我们看看,需要一些帮助

你可以这样写

df= df.groupby('student').agg({'id':'max', 'Class': lambda x: x.tolist()})
希望有帮助,朱利奥

试试下面的方法

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

我不确定列表是否真的是理想的解决方案。将对象存储在数据帧中只会给未来的大多数操作带来障碍。例如,检查哪些学生学过
生物学
,或者至少在没有一种性能差得多的方法的情况下,这不再是一件小事了。@Alolz你推荐一种替代方法吗?这取决于你最终需要什么样的操作。拥有一个长格式,其中每一行都是一个唯一的键(如上所述),这可能是有用的,而且是灵活的。不难转动轴,或者从那里得到假人,这可能更适合做其他事情。对我来说很有用,谢谢你快速准确的回答。
df= df.groupby('student').agg({'id':'max', 'Class': lambda x: x.tolist()})
df.groupby(['Student', 'ID'],as_index=False).agg(lambda x:','.join('"'+x+'"'))