首页 > 解决方案 > Python pandas如何在一直存储密钥的同时进行分组

问题描述

我有一个名为“数据”的数据框,我想根据多个键对其进行分组和求和:

NAME     ORDER   COST  
 Joe    Burger     10
 Joe    Burger     12
 Jill    Fries      5
 Joe     Nachos     8

我跑

data = data.groupby(['NAME','ORDER'])['COST'].sum()

得到这个:

NAME     ORDER   COST  
 Joe    Burger     22
        Nachos     8
 Jill    Fries      5

但我失去了他们在第二排的关键“乔”。我希望数据框保留所有键,这样如果 Joe 有多个汉堡订单,它将以 Joe 开头,如下所示:

NAME     ORDER   COST  
 Joe    Burger     22
 Joe    Nachos     8
 Jill    Fries      5

类似的数据框初始化:df = pd.DataFrame({'NAME': ['Joe', 'Jill', 'Joe', 'Joe'], 'ORDER': ['burger', 'fries', 'burger', ' Ube'], 'COST': [1, 2, 3, 6]})

标签: pythonpandasdataframe

解决方案


groupby 聚合的输出是具有 MultiIndex 的数据帧,包括与使用的分组器一样多的级别(在这种情况下为 2:'NAME' 和 'ORDER')

您的新数据框在第二行仍然有那个“乔”,只是在print. 看这里

data = data.groupby(['NAME', 'ORDER']).COST.sum()

>>> print(data)
NAME  ORDER
Jill  Fries      5
Joe   Burger    22
      Nachos     8
Name: COST, dtype: int64

>>> print(data.index)
MultiIndex([('Jill',  'Fries'),
            ( 'Joe', 'Burger'),
            ( 'Joe', 'Nachos')],
           names=['NAME', 'ORDER'])


>>> print(data.loc[('Joe', 'Nachos')])
8

实际上data现在是一个系列(不是数据框),因为您从 groupby 对象中只选择了一个列。


推荐阅读