按 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]
问题:
- unique() return 两个学校不仅 last 学校 。
- 这一行 return SCHOOL 列作为 np.array 而不是字符串 。很难用这个 df 进一步工作。
这两个问题都是根据@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
使用带有参数 last
的 drop_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
从两个字符串列 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]
问题:
- unique() return 两个学校不仅 last 学校 。
- 这一行 return SCHOOL 列作为 np.array 而不是字符串 。很难用这个 df 进一步工作。
这两个问题都是根据@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
使用带有参数 last
的 drop_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