2 回答
TA贡献1796条经验 获得超10个赞
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)
count
Weekday Item
T B 3
C 2
A 1
D 1
E 1
M A 3
B 2
C 1
D 1
E 1
TA贡献2003条经验 获得超2个赞
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])
counter
Weekday Items
M A 3
B 2
C 1
D 1
E 1
T B 3
C 2
A 1
D 1
E 1
分组两次,首先获取计数器变量。第二个组允许通过组进行迭代,以使用 nlargest 获得前 5 个。最后一步是将列表中的数据帧合并为一个。
vb_rise的解决方案应该更快,因为它避免了迭代过程。
添加回答
举报