使用Pandas DataFrame / 排序

3
我正在使用Excel处理一个大型数据集,我想要按每个指数值的前25个数字进行排序。
数据看起来像这样:
最终PAC ID是公司编号并且会变化(在给定数据中不显示)。PAC捐款是我想要按照排序的数字。
例如,C00003590公司将有50项捐款,分别向不同的候选人捐赠“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)
3个回答

2

我认为您需要使用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保存至Excel:

df1.to_excel('filename.xlsx')

这正是我所需要的!但如果我删除打印命令,似乎它并不会改变数据框本身,那么我该如何将其保存回Excel文件呢? - Menno Van Dijk
啊对了,我试着做同样的事情,但是我不是创建一个新的数据帧,而是试图覆盖当前的数据帧。非常感谢你的回答,真的帮了很多忙。 - Menno Van Dijk

0

在这里,您可以将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}

0
df.groupby('Final PAC ID').head(50).reset_index(drop=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接