【问题标题】:Working with Pandas DataFrame / Sorting使用 Pandas DataFrame / 排序
【发布时间】:2017-08-24 07:02:04
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: python excel sorting pandas


    【解决方案1】:

    我觉得你需要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 文件?如果我删除打印命令,它似乎不会改变数据框本身。
    • 啊,对,我尝试做同样的事情,但不是创建一个新的数据框,我试图覆盖当前的数据框。非常感谢您的回答,但对您有很大帮助。
    【解决方案2】:
    df.groupby('Final PAC ID').head(50).reset_index(drop=True)
    

    【讨论】:

      【解决方案3】:

      您可以在此处将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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-17
        • 2021-04-20
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 2017-05-30
        相关资源
        最近更新 更多