编程语言
首页 > 编程语言> > python-对pandas组执行按索引排序的更快方法

python-对pandas组执行按索引排序的更快方法

作者:互联网

我有一个名称为(person_name),颜色为(shirt_color)的数据框
每个人在特定的日子都穿某种颜色的衬衫(天数可以是任意的)

例如输入:

name    color
----------------
John    White
John    White
John    Blue
John    Blue
John    White
Tom     Blue
Tom     Blue
Tom     Green
Tom     Black
Jerry   Black
Jerry   Blue
Jerry   Black

我需要找到每个人穿的最好的彩色衬衫,
根据best_color_order例如结果:

name    color
-------------
Jerry   Blue
John    White
Tom     Green

我正在执行以下操作:

best_color_order = ['White', 'Green', 'Blue', 'Black']

best_color_list = [[name, list(group['color']).sort(key=best_color_order.index)[0]]
                    for name, group in df.groupby(by='name', sort=False, as_index=False)]

best_color_df = pd.DataFrame(best_color_list, columns=['name', 'color'])

如果我有数百万条记录,是否有一种更快的方法?

解决方法:

将列颜色转换为ordered categorical,以便将其按所需顺序排序,然后按颜色对值进行排序,最后对groupby进行排序,并为每个名称取第一个值:

best_color_order = ['White', 'Green', 'Blue', 'Black']

df['color'] = pd.Categorical(df['color'], categories = best_color_order, ordered=True)

df.sort_values('color').groupby('name').first()

       color
name        
Jerry   Blue
John   White
Tom    Green

[编辑]:更快的方法可能是相同的,但是不是删除groupby,而是删除重复的名称并保留第一个名称(这是drop_duplicates函数的默认名称):

best_color_order = ['White', 'Green', 'Blue', 'Black']

df['color'] = pd.Categorical(df['color'], categories = best_color_order, ordered=True)

df.sort_values('color').drop_duplicates('name')

     name  color
0    John  White
7     Tom  Green
10  Jerry   Blue

标签:pandas-groupby,pandas,python-3-x,python,numpy
来源: https://codeday.me/bug/20191108/2009151.html