如何在分组数据帧中获取每个组的前5个项目?

df = pd.DataFrame({'Weekday':list('MMMMMMMMMMTTTTTTTTTT'),

                  'Items': list("AAABBCDEFGBBBCCADEFG")

                  })


grouped = df.groupby(['Weekday','Items'],sort=True).agg({'Items': 'count'})

然后,我得到分组的结果:


Weekday Items       

M       A          3

        B          2

        C          1

        D          1

        E          1

        F          1

        G          1

T       A          1

        B          3

        C          2

        D          1

        E          1

        F          1

        G          1

因此,如何为每个“工作日”输出前5个项目(“M”和“T”为5),例如:


Weekday Items       

M       A          3

        B          2

        C          1

        D          1

        E          1


T

        B          3

        C          2

        A          1

        D          1

        E          1

任何人都可以帮忙吗?


慕森王
浏览 128回答 2
2回答

白衣染霜花

df = pd.DataFrame({'Weekday':list('MMMMMMMMMMTTTTTTTTTT'),              'Item': list("AAABBCDEFGBBBCCADEFG")              })grouped = df.groupby(['Weekday','Item'],sort=True).agg(count=('Item', 'count'))grouped.sort_values(['Weekday','count'],ascending=False).groupby('Weekday').head(5)           countWeekday Item       T    B   3        C   2        A   1        D   1        E   1    M   A   3        B   2        C   1        D   1        E   1

湖上湖

 grouped = (df.groupby(['Weekday','Items'])            .Items.agg(counter='count')            .groupby(['Weekday'],            as_index=False))pd.concat([group.nlargest(5,'counter') for name,group in grouped])              counterWeekday Items   M       A       3        B       2        C       1        D       1        E       1T       B       3        C       2        A       1        D       1        E       1分组两次,首先获取计数器变量。第二个组允许通过组进行迭代,以使用 nlargest 获得前 5 个。最后一步是将列表中的数据帧合并为一个。vb_rise的解决方案应该更快,因为它避免了迭代过程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python