【问题标题】:How can I sort values in Python after grouping and aggregating them (with np.sum)?在分组和聚合它们(使用 np.sum)之后,如何在 Python 中对值进行排序?
【发布时间】:2020-09-25 06:02:14
【问题描述】:

所以我正在处理来自文本文件的餐厅收据数据,并且我已经计算出每种商品的订单数量。但是,我现在要组织这个是降序的,它不让我。它按字母顺序排列。将数据集上传到 Python 后,我所做的只是将其打印出来,然后进行分组,将每个菜单项放入自己的组中。之后,我将其汇总以获取每个菜单项的总数(已订购的总次数)。我所有的代码都在下面。

import pandas as pd

import numpy as np

data = pd.read_csv('the file location', sep='\t')

df = pd.DataFrame(data)

grouped=df.groupby('item_name') #item_name is the variable I am interested in from data set. It is the name of 
                                each menu item from the receipt

print (grouped['item_name'].agg(np.size)) #aggregating the menu items to see how many of each there are

在此之后,我得到了每个菜单项被订购了多少次的总计数的输出,但数字不是按降序排列的。它们根据项目名称按字母顺序排列。我希望按数字降序排列(最高的数字在顶部)请帮忙!

【问题讨论】:

    标签: python pandas dataframe sorting aggregation


    【解决方案1】:

    如果我正确理解您的问题,您是在尝试计算已订购的每种商品的数量?

    import pandas 
    
    df = pd.read_csv('the file location', sep='\t')
    
    # value_counts already sorts in ascending order
    df['item_name'].value_counts()
    
    # other option
    df.groupby('item_name').size().sort_values(ascending=False)
    

    【讨论】:

      【解决方案2】:

      最简单的解决方案是在数据框中再添加一个字段,用1 值填充它,然后将它们相加:

      import pandas as pd
      
      
      df = pd.read_csv('the file location', sep='\t')
      
      df['items_count'] = 1
      
      grouped = df.groupby(by='item_name').sum()
      
      print(grouped.sort_values(by='items_count', ascending=False))
      

      附: pd.read_csv也返回DataFrame,不需要再传给pd.DataFrame。

      【讨论】:

        猜你喜欢
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 2018-06-15
        • 2021-05-30
        • 2019-09-28
        • 1970-01-01
        相关资源
        最近更新 更多