按pandas数据帧分组唯一的第一个值 - 返回numpy数组

时间:2017-10-18 09:30:25

标签: python pandas numpy group-by unique

从两个字符串列pandas数据框看起来像:

d = {'SCHOOL' : ['Yale', 'Yale', 'LBS', 'Harvard','UCLA', 'Harvard', 'HEC'],
     'NAME' : ['John', 'Marc', 'Alex', 'Will', 'Will','Miller', 'Tom']}

df = pd.DataFrame(d)

请注意,NAME与SCHOOL之间的关系是n到1。 我希望得到最后一所学校,以防一个人去过两所不同的学校(见“Will”案例)。

到目前为止,我得到了:

df = df.groupby('NAME')['SCHOOL'].unique().reset_index()

返回:

     NAME           SCHOOL
0    Alex            [LBS]
1    John           [Yale]
2    Marc           [Yale]
3  Miller        [Harvard]
4     Tom            [HEC]
5    Will  [Harvard, UCLA]

问题:

  • unique()返回两所学校不仅最后一所学校
  • 此行将SCHOOL列作为 np.array而不是字符串返回。用这个df很难进一步工作。

2 个答案:

答案 0 :(得分:1)

基于@IanS评论解决的两个问题。

使用last()代替unique()

df = df.groupby('NAME')['SCHOOL'].last().reset_index()

返回:

     NAME   SCHOOL
0    Alex      LBS
1    John     Yale
2    Marc     Yale
3  Miller  Harvard
4     Tom      HEC
5    Will     UCLA

答案 1 :(得分:1)

I found this link for determining that a webpage is using angular与参数last一起使用,并指定检查重复项的列:

df = df.drop_duplicates('NAME', keep='last')
print (df)
     NAME   SCHOOL
0    John     Yale
1    Marc     Yale
2    Alex      LBS
4    Will     UCLA
5  Miller  Harvard
6     Tom      HEC

如果需要排序,请添加drop_duplicates

df = df.drop_duplicates('NAME', keep='last').sort_values('NAME')
print (df)
     NAME   SCHOOL
2    Alex      LBS
0    John     Yale
1    Marc     Yale
5  Miller  Harvard
6     Tom      HEC
4    Will     UCLA