在groupby上最大,具有多索引和多个agg列

D_usv

努力将.nlargest()应用于我的groupedby数据,以便仅显示每个索引的总收入最多的10个[0]

按数据分组如下:

当前数据

当我跑步时:

grp_data.n_largest(10,'GrossRevenue_GBP')

似乎不适用于我,完整的代码段如下:

tmean = lambda x :stats.trim_mean(x, 0.1)

data = data.loc[(data['YYYY'] == 2016)&(data['New_category_ID'] != 0)]

grp_data = data.groupby(['New_category','CDI_CUS_NM'])['GrossRevenue_GBP',
'OrderCount',
'% Rev', 
'MOVC_GBP', 
'Average order size']
.aggregate({'GrossRevenue_GBP':np.sum, 'OrderCount':np.sum,'% Rev': np.sum,'MOVC_GBP': tmean ,'Average order size': tmean })
.nlargest(10,'GrossRevenue_GBP')


grp_data['Country'] = 'EU'


key1 = grp_data.index.labels[0]
key2 = grp_data['GrossRevenue_GBP'].rank(ascending=False)
sorter = np.lexsort((key2, key1))

grp_data = grp_data.take(sorter)


grp_data = grp_data[['% Rev','GrossRevenue_GBP', 'MOVC_GBP','Average order size','OrderCount','Country']]

非常感谢您的帮助。

谢谢,

耶斯列尔

我认为您需要groupby首先具有Multiindex级别,并使用以下功能nlargest

grp_data = data.groupby(['New_category','CDI_CUS_NM']) 
               .aggregate({'GrossRevenue_GBP':np.sum, 
                           'OrderCount':np.sum,
                           '% Rev': np.sum,
                           'MOVC_GBP': tmean ,
                           'Average order size': tmean })

df = grp_data.groupby('New_category')
             .apply(lambda x: x.nlargest(1,'GrossRevenue_GBP'))
             .reset_index(level=0, drop=True)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章