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

Group by pandas data frame unique first values - numpy array returned

从两个字符串列 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()

Return:

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

问题:

这两个问题都是根据@IanS 的评论解决的。

使用 last() 代替 unique():

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

Return:

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

使用带有参数 lastdrop_duplicates 并指定用于检查重复项的列:

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

另外如果需要排序添加sort_values:

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