我有一个熊猫数据帧q2,它看起来像这样:
StudentID Subjects
6 323 History
9 323 Physics
8 999 Chemistry
7 999 History
4 999 Physics
0 1234 Chemistry
5 2834 Physics
1 3455 Chemistry
2 3455 History
10 3455 Mathematics
3 56767 Mathematics我想找出哪个学生选了哪些课程,并将其显示在屏幕上。
gb = q2.groupby(('StudentID'))
result = gb['Subjects'].unique()
c1=pd.DataFrame({'StudentID':result.index, 'Subjects':result.values})c1看起来像这样
StudentID Subjects
0 323 [History, Physics]
1 999 [Chemistry, History, Physics]
2 1234 [Chemistry]
3 2834 [Physics]
4 3455 [Chemistry, History, Mathematics]
5 56767 [Mathematics]但是,期望的输出如下所示:
323: History, Physics
999: Chemistry, History, Physics
1234: Chemistry
2834: Physics
3455: Chemistry, History, Mathematics
56767: Mathematics我能做什么?
发布于 2016-09-23 01:35:59
我认为你可以使用apply join函数。您还可以使用reset_index来创建DataFrame
gb = q2.groupby(('StudentID'))
result = gb['Subjects'].unique()
c1 = result.reset_index()
c1.Subjects = c1.Subjects.apply(', '.join)
print (c1)
StudentID Subjects
0 323 History, Physics
1 999 Chemistry, History, Physics
2 1234 Chemistry
3 2834 Physics
4 3455 Chemistry, History, Mathematics
5 56767 Mathematics最后,您可以将列StudentID转换为str (如果dtype为int)并合并在一起:
c1['new'] = c1.StudentID.astype(str) + ':' + c1.Subjects
print (c1)
StudentID Subjects \
0 323 History, Physics
1 999 Chemistry, History, Physics
2 1234 Chemistry
3 2834 Physics
4 3455 Chemistry, History, Mathematics
5 56767 Mathematics
new
0 323:History, Physics
1 999:Chemistry, History, Physics
2 1234:Chemistry
3 2834:Physics
4 3455:Chemistry, History, Mathematics
5 56767:Mathematics 另外,如果原始数据可以覆盖,请使用:
result = result.index.to_series().astype(str) + ':' + result.apply(', '.join)
print (result)
StudentID
323 323:History, Physics
999 999:Chemistry, History, Physics
1234 1234:Chemistry
2834 2834:Physics
3455 3455:Chemistry, History, Mathematics
56767 56767:Mathematics
dtype: objecthttps://stackoverflow.com/questions/39645404
复制相似问题