我不确定该如何命名。
假设以下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,它的结构不如本例所示。任何帮助表示赞赏。
答案 0 :(得分:2)
您需要分别在Student
和ID
上groupby
,然后使用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+'"'))