Работа с Pandas DataFrame / Сортировка

Я работаю с большим набором данных в Excel, в котором я пытаюсь сортировать число по 25 числам за индекс.

Дантет выглядит следующим образом:

пример

Идентификатор конечного PAC – это номер компании и изменения (это не показано в данных данных). Вклад PAC – это номер, который я хочу отсортировать.

Так, например, будет сделано 50 вкладов, сделанных компанией C00003590, различным кандидатам с объемом «вклада PAC», я хотел бы отсортировать 25 лучших вкладов, сделанных для каждой компании.

Я пробовал работать со словарями, создавал словарь для каждой компании и добавлял числа кандидатов в виде строкового ключа, а вклад в качестве значения.

Код, который у меня есть до сих пор, следующий (это может быть совершенно неправильный способ сделать это):

import pandas as pd df1 = pd.read_excel('Test2.xlsx') dict_company = {} k1 = str(df1['Final PAC ID']) k2 = str(df1['Candidate ID']) for each in range(0,100): dict_company[k1)[each]] = {} dict_company[k1)[each]] = k2[each] if each % 50 == 0: print(each) print(dict_company) for each in range(0,100): dict_company[k1][k2][each] = round(float(k1[each])) if each % 50: print(each) print(dict_company) 

Я думаю, вам нужно nlargest :

 df1 = df.groupby('Final PAC ID')['PAC contribution'].nlargest(50) 

Если нужны все столбцы:

 cols = df.columns[~df.columns.isin(['PAC contribution','Final PAC ID'])].tolist() df1 = df.set_index(cols) .groupby('Final PAC ID')['PAC contribution'] .nlargest(50) .reset_index() 

Другое решение (может быть медленнее):

 df1 = df.sort_values('PAC contribution', ascending=False).groupby('Final PAC ID').head(50) 

Последнее сохранение, чтобы преуспеть to_excel :

 df1.to_excel('filename.xlsx') 
 df.groupby('Final PAC ID').head(50).reset_index(drop=True) 

Вы можете использовать groupby в сочетании со пониманием словаря здесь. result является словарь, содержащий ваши названия компаний в качестве ключей и вспомогательные фреймы с 25 высшими платежами в качестве значений:

 def aggregate(sub_df): return sub_df.sort_values('PAC contribution', ascending=False).head(25) grouped = df.groupby('Final PAC ID') results = {company: aggregate(sub_df) for company, sub_df in grouped} 
Давайте будем гением компьютера.