Python 根据创建的列按两列分组

Python 根据创建的列按两列分组,python,pandas,group-by,jupyter-notebook,Python,Pandas,Group By,Jupyter Notebook,我有一个这样的数据集 df = pd.DataFrame({'time':['13:30', '9:20', '18:12', '19:00', '11:20', '13:30', '15:20', '17:12', '16:00', '8:20'], 'item': [coffee, bread, pizza, rice, soup, coffee, bread, pizza, rice, soup]}) df['hour'] = df.Time.apply(l

我有一个这样的数据集

df = pd.DataFrame({'time':['13:30', '9:20', '18:12', '19:00', '11:20', '13:30', '15:20', '17:12', '16:00', '8:20'],
               'item': [coffee, bread, pizza, rice, soup, coffee, bread, pizza, rice, soup]})
df['hour'] = df.Time.apply(lambda x: int(x.split(':')[0]))
def time_period(hour):
if hour >= 6 and hour < 11:
    return 'breakfast'
elif hour >= 11 and hour < 15:
    return 'lunch'
else:
    return 'dinner'
df['meal'] = df['hour'].apply(lambda x: time_period(x))
我想把时间分成三顿饭,早餐,午餐,晚餐。并将其添加到数据中

我是这样做的

df = pd.DataFrame({'time':['13:30', '9:20', '18:12', '19:00', '11:20', '13:30', '15:20', '17:12', '16:00', '8:20'],
               'item': [coffee, bread, pizza, rice, soup, coffee, bread, pizza, rice, soup]})
df['hour'] = df.Time.apply(lambda x: int(x.split(':')[0]))
def time_period(hour):
if hour >= 6 and hour < 11:
    return 'breakfast'
elif hour >= 11 and hour < 15:
    return 'lunch'
else:
    return 'dinner'
df['meal'] = df['hour'].apply(lambda x: time_period(x))
df['hour']=df.Time.apply(lambda x:int(x.split(':')[0]))
def时间段(小时):
如果小时>=6且小时<11:
返回“早餐”
elif小时>=11和小时<15:
返回“午餐”
其他:
返回“晚餐”
df['mean']=df['hour'].应用(λx:时间段(x))
现在我想根据这三顿饭的数据分组,并得到如下输出:

它看起来与您预期的输出不完全一样,但它遵循相同的理念:

>>> df.groupby("meal")["item"].value_counts()
meal       item  
breakfast  bread     1
           soup      1
dinner     pizza     2
           rice      2
           bread     1
lunch      coffee    2
           soup      1

df2=df.groupby([df.fine,df.item]).count()
类似于您要查找的内容?ValueError:“fine”既是一个索引级别又是一个列标签,这是不明确的。也许可以尝试不使用前两行代码,因为您似乎已经有了获取
fine
的代码。是的,你知道我如何根据早餐的数量对桌子进行分类吗?