我目前拥有以下功能:
def process_data(data):
data = data[data['Bucket Number'] == 25.0].groupby(['Activity Month', 'Agent Sign']).agg({'Total Ping Current Forecast': [np.sum]})
data = data.sort_values(['Activity Month', ('Total Ping Current Forecast', 'sum')], ascending=[True, False]).groupby(level=0).head(3)
return data
这将产生以下输出:
Total Ping Current Forecast
sum
Activity Month Agent Sign
202001 {Various} 1.305513e+09
HDQGR1 2.171435e+08
CRCTLD 4.774614e+07
202002 {Various} 1.159181e+09
HDQGR1 1.912536e+08
CRCTLD 4.573402e+07
202003 {Various} 1.090292e+09
HDQGR1 1.852591e+08
CRCTLD 4.045673e+07
我想删除每个组的第一行,以便输出如下所示:
Total Ping Current Forecast
sum
Activity Month Agent Sign
202001 HDQGR1 2.171435e+08
CRCTLD 4.774614e+07
DFW1DF 1.622023e+07
202002 HDQGR1 1.912536e+08
CRCTLD 4.573402e+07
HDQ1ZB 2.711470e+07
202003 HDQGR1 1.852591e+08
CRCTLD 4.045673e+07
HDQ1ZB 1.532134e+07
本质上,我希望删除每个组的最高值,因为数据帧已经按sum
降序排序
我找到了this solution并尝试了以下方法:
def process_data(data):
data = data[data['Bucket Number'] == 25.0].groupby(['Activity Month', 'Agent Sign']).agg({'Total Ping Current Forecast': [np.sum]})
data = data.sort_values(['Activity Month', ('Total Ping Current Forecast', 'sum')], ascending=[True, False]).apply(lambda x: x.iloc[1:]).groupby(level=0).head(3)
return data
但它仅将该函数应用于给出该结果的第一组:
Total Ping Current Forecast
sum
Activity Month Agent Sign
202001 HDQGR1 2.171435e+08
CRCTLD 4.774614e+07
DFW1DF 1.622023e+07
202002 {Various} 1.159181e+09
HDQGR1 1.912536e+08
CRCTLD 4.573402e+07
202003 {Various} 1.090292e+09
HDQGR1 1.852591e+08
CRCTLD 4.045673e+07
如何将该函数应用于数据帧中的每个组?
在代码中,您可以使用
.nth([1, 2])
,而不是以.head(3)
结束这将返回每个组的第二和第三个元素,因为
nth
的索引是基于零的阅读the docs中的更多内容
相关问题 更多 >
编程相关推荐