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的解決方案應該更快,因為它避免了迭代過程。
添加回答
舉報