使用Pandas DataFrame / Sorting

我正在使用Excel中的一个大数据集,我试图按每个索引值sorting前25位。

数据库看起来像这样:

例

最终的PAC ID是公司编号并进行更改(在给定的数据中没有显示)。 PAC贡献是我想要sorting的数字。

举例来说,公司C00003590会为我们提供50笔贡献给“PAC贡献”的不同候选人,我想对每个公司做的25个贡献sorting。

我已经尝试使用词典,为每个公司创build一本词典,并将候选人数字作为string键join,并将贡献作为一个值。

我到目前为止的代码是以下(这可能是完全错误的方式去了)虽然):

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() 

另一个解决scheme(可能会更慢):

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

最后用to_excel保存为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}