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

2024-10-03 04:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

从一个两列字符串的数据框中,如下所示:

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。 我想得到最后一所学校,以防一个人去了两所不同的学校(见“威尔”案例)。你知道吗

到目前为止我得到了:

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()不仅返回上一个学校,还返回两个学校。你知道吗
  • 此行返回学校列作为np.数组而不是字符串。很难进一步使用此df。你知道吗

Tags: 字符串namedfmarcjohnwill学校school
2条回答

这两个问题都是基于@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

^{}与参数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

如果需要排序,请添加^{}

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

相关问题 更多 >