如何按Player列的第二个字符串(姓氏)对pandas DataFrame排序
Pandas按Player列姓氏排序实现方案
你可以直接利用sort_values的key参数提取姓氏作为排序依据,代码如下:
# 按姓氏排序pitching_df pitching_df = pitching_df.sort_values( by='Player', key=lambda x: x.str.split().str[-1] ) # 同理处理batting_df batting_df = batting_df.sort_values( by='Player', key=lambda x: x.str.split().str[-1] )
代码说明
str.split()会将Player列的字符串按空格切割为列表,比如Andre Duffty切割后为['Andre', 'Duffty']- 这里用
str[-1]取列表最后一位元素,而非str[1],是为了兼容带有中间名的姓名格式,保证取到的始终是姓氏 - 如果使用的pandas版本低于1.1.0不支持
key参数,可以用临时列的方式实现:
# 低版本pandas兼容方案 # 处理pitching_df pitching_df['last_name'] = pitching_df['Player'].str.split().str[-1] pitching_df = pitching_df.sort_values('last_name').drop('last_name', axis=1) # 处理batting_df batting_df['last_name'] = batting_df['Player'].str.split().str[-1] batting_df = batting_df.sort_values('last_name').drop('last_name', axis=1)
内容的提问来源于stack exchange,提问作者user15586908
相关产品推荐
相关产品推荐

