Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据帧/排序_Python_Excel_Sorting_Pandas - Fatal编程技术网

Python 使用数据帧/排序

Python 使用数据帧/排序,python,excel,sorting,pandas,Python,Excel,Sorting,Pandas,我正在使用Excel中的一个大数据集,在这个数据集中,我试图按每个索引值的前25位对数字进行排序 数据站点如下所示: 最终的PAC ID是公司编号和变更(在给定数据中不显示)。PAC贡献是我想要排序的数字 例如,C00003590公司将向不同的候选人提供50笔捐款,金额为“PAC捐款”,我想对每个公司的前25笔捐款进行排序 我尝试过使用字典,为每个公司创建一个字典,并将候选数字作为字符串键添加进去,将贡献作为值添加进去 到目前为止,我的代码如下(但这可能是完全错误的方式): 我认为你需要: 如

我正在使用Excel中的一个大数据集,在这个数据集中,我试图按每个索引值的前25位对数字进行排序

数据站点如下所示:

最终的PAC ID是公司编号和变更(在给定数据中不显示)。PAC贡献是我想要排序的数字

例如,C00003590公司将向不同的候选人提供50笔捐款,金额为“PAC捐款”,我想对每个公司的前25笔捐款进行排序

我尝试过使用字典,为每个公司创建一个字典,并将候选数字作为字符串键添加进去,将贡献作为值添加进去

到目前为止,我的代码如下(但这可能是完全错误的方式):

我认为你需要:

如果需要所有列:

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()
另一种解决方案(可能更慢):

上次保存到excel的方法是:

你可以在这里与词典理解结合使用。
结果
是一个字典,其中包含公司名称作为关键字,以及前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}

这正是我需要的!但是,我如何将其保存回excel文件?如果我删除print命令,它似乎不会改变数据帧本身。啊,对了,我尝试过做同样的事情,但我没有做一个新的数据帧,而是尝试覆盖当前的数据帧。不过非常感谢你的回答,帮助很大。
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)
df1.to_excel('filename.xlsx')
df.groupby('Final PAC ID').head(50).reset_index(drop=True)
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}