熊猫:在groupby内对特定列进行排序

高尔古特

我正在使用的数据集在这里这是Chipotle订单的数据集。item_name对于每种出售的商品都有一个,然后在item_name其中有多个可能choice_description准确描述商品的内容。

因此,让我们先导入文件并对其进行一些清理:

chipo = pd.read_csv('chipotle.tsv', sep='\t')
del chipo['order_id']
del chipo['quantity']
chipo['revenue'] = chipo['item_price'].str.replace('$','').astype(float)
chipo['count'] = 1

我试图列出choice_description每个团队订购的数量item_name通过使用groupby然后将各列(包括1的列)求和,这很容易,

grouped = chipo.groupby(['item_name','choice_description']).sum()

但现在我想对其中的计数'item_name'进行排序哦,我也想保留该item_price列以便以后进行计算,所以我不能仅将DataFrame转换为单列框架。对于我的一生,我不知道该怎么做。

我不能只打电话,grouped.sort_values('count')因为它对所有观察结果进行排序,而不仅仅是对各个item_name组进行排序如何仅按该列排序,但将排序限制在组内?

即使似乎以前的答案都在讨论这个问题(例如here),但是它们全部都使用了已弃用的排序命令(例如Series.order()DataFrame.sort()),或者没有完全满足我的需要。我该如何执行看似简单的任务?

忘了它

如何仅按该列排序,但将排序限制在组内?

item_name排序count因为item_name是索引级别,并且count是列,所以我们必须移至item_name列并进行调用,DataFrame.sort_values或者移至count索引并进行调用DataFrame.sortlevel

例如

import pandas as pd
chipo = pd.read_csv('chipotle.tsv', sep='\t')
del chipo['order_id']
del chipo['quantity']
chipo['revenue'] = chipo['item_price'].str.replace('$','').astype(float)
chipo['count'] = 1
result = chipo.groupby(['item_name','choice_description']).sum()

result = (result.set_index('count', append=True)
            .sortlevel(axis=0, level=['item_name', 'count'], ascending=False)
            .reset_index('count', drop=False))

产量

                                                                          revenue  \
                                                                      revenue  count
item_name             choice_description                                                
Veggie Salad Bowl     [Fresh Tomato Salsa, [Fajita Vegetables, Lettuc...    11.25      1
                      [Fresh Tomato Salsa, [Fajita Vegetables, Rice, ...    11.25      1
                      [Fresh Tomato Salsa, [Fajita Vegetables, Rice, ...    11.25      1
                      [Fresh Tomato Salsa, [Rice, Lettuce, Guacamole,...    11.25      1
...                      
Barbacoa Bowl         [Roasted Chili Corn Salsa, [Fajita Vegetables, ...    23.50      2
                      [Fresh Tomato Salsa, [Fajita Vegetables, Rice, ...     9.25      1
                      [Fresh Tomato Salsa, [Fajita Vegetables, Rice, ...     9.25      1
                      [Tomatillo Red Chili Salsa, [Fajita Vegetables,...    11.75      1
                      [Tomatillo Red Chili Salsa, [Rice, Black Beans,...     9.25      1
                      [Tomatillo Red Chili Salsa, [Rice, Cheese, Lett...     9.25      1
                      [Tomatillo Red Chili Salsa, [Rice, Pinto Beans,...     9.25      1
                      [[Tomatillo-Green Chili Salsa (Medium), Roasted...    11.48      1
                      [[Tomatillo-Red Chili Salsa (Hot), Tomatillo-Gr...     8.99      1
6 Pack Soft Drink     [Diet Coke]                                           19.47      3
                      [Coke]                                                 6.49      1
                      [Sprite]                                               6.49      1

[314 rows x 2 columns]

在上述两个选项中,使用sortlevel的速度比快sort_values这是一个基准:

In [73]: %timeit using_sortlevel(totals)
10 loops, best of 3: 148 ms per loop

In [74]: %timeit using_sort_values(totals)
10 loops, best of 3: 174 ms per loop

使用此设置:

import pandas as pd
N = 10**6
chipo = pd.DataFrame(np.random.randint(1000, size=(N,4)), columns=list('ABCD'))
totals = chipo.groupby(['A','B']).sum()

def using_sortlevel(df):
    return (df.set_index('C', append=True)
            .sortlevel(axis=0, level=['A', 'C'], ascending=False)
            .reset_index('C', drop=False))

def using_sort_values(df):
    return (df.reset_index('A')
            .sort_values(by=['A', 'C'], ascending=False)
            .set_index('A', append=True)
            .swaplevel(0, 1, axis=0))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫:按平均值对列进行排序

来自分类Dev

对熊猫数据透视表中的列进行重新排序

来自分类Dev

熊猫:分别对每一列进行排序

来自分类Dev

在熊猫数据框中对列进行排序

来自分类Dev

如何对列进行排序并将它们分组在熊猫上?

来自分类Dev

熊猫groupby对摘要统计信息进行排序

来自分类Dev

根据特定索引对多索引熊猫数据框进行排序

来自分类Dev

如何根据信_and_号熊猫列进行排序?

来自分类Dev

对每组groupby熊猫内的计数值进行排序

来自分类Dev

根据特定顺序对熊猫数据框进行排序

来自分类Dev

用熊猫按绝对值对列进行排序

来自分类Dev

Python:如何强制熊猫对数据集中的列进行排序?

来自分类Dev

阻止熊猫对列进行排序

来自分类Dev

熊猫-如何对groupby()的总和进行排序

来自分类Dev

使用“ groupby”而不在组内进行聚合和排序

来自分类Dev

熊猫列在追加到新数据框后进行排序

来自分类Dev

根据单个列对熊猫中的多个列进行排序

来自分类Dev

在GroupBy之后根据特定列对数据框进行排序

来自分类Dev

按特定列排序标题-熊猫

来自分类Dev

使用熊猫对列之间的值进行排序

来自分类Dev

熊猫列在Groupby排序列上创建功能

来自分类Dev

堆叠熊猫数据框时避免对列进行排序

来自分类Dev

根据groupby的结果对列进行排序

来自分类Dev

根据分类列的值对熊猫数据框进行排序

来自分类Dev

根据分类列的值对熊猫数据框进行排序

来自分类Dev

尝试对linux中的特定列进行排序

来自分类Dev

根据特定索引对多索引熊猫数据框进行排序

来自分类Dev

按 groupby 对列进行排序

来自分类Dev

按特定行对列进行排序

Related 相关文章

热门标签

归档