Python Groupby显示最大值和相应的标签-熊猫

Python Groupby显示最大值和相应的标签-熊猫,python,pandas,Python,Pandas,我试图将特定值分组,并返回一个单独列的最大值。我还希望返回与此最大值关联的相应标签。使用下面的方法,我将根据项目、组、方向对值进行分组,最大值由值确定。我希望返回相应的标签,其中包含相应的最大值值 df = pd.DataFrame({ 'Item' : [10,10,10,10,10,10,10,10,10], 'Label' : ['X','V','Y','Z','D','A','E','B','M'], 'Value' : [80.0,80.0,20

我试图将特定值分组,并返回一个单独列的最大值。我还希望返回与此最大值关联的相应标签。使用下面的方法,我将根据
项目、组、方向对值进行分组,最大值由
确定。我希望返回相应的
标签
,其中包含相应的最大值

df = pd.DataFrame({  
    'Item' : [10,10,10,10,10,10,10,10,10],  
    'Label' : ['X','V','Y','Z','D','A','E','B','M'],    
    'Value' : [80.0,80.0,200.0,210.0,260.0,260.0,300.0,300.0,310.0],  
    'Group' : ['Red','Green','Red','Green','Red','Green','Green','Red','Green'],            
    'Direction' : ['Up','Up','Down','Up','Up','Up','Up','Down','Up'],                                       
    })

max_num = (df.groupby(['Item','Group','Direction'])['Value','Label']
                   .max()
                   .unstack([1, 2], 
                   fill_value = 0)
                   .reset_index()
                   )

max_num.columns = [f'{x[0]}_{x[1]}' for x in max_num.columns]
预期产出:

   Item  Red_Up_Value Red_Up_ID  Red_Down_Value Red_Down_ID  Green_Up_Value Green_Up_ID  Green_Down_Value  Green_Down_ID
0    10         260.0         D           300.0           B           310.0           M               0.0            NaN

尝试使用
Groupby.transform
df.pivot

In [270]: df['max_value'] = df.groupby(['Item','Group','Direction'])['Value'].transform('max')

In [279]: df[df.max_value.eq(df.Value)].pivot('Item', ['Group', 'Direction', 'Label'], 'Value')
Out[279]: 
Group        Red  Green    Red  Green
Direction     Up   Down   Down     Up
Label          D      A      B      M
Item                                 
10         260.0  260.0  300.0  310.0
按最大值与for
标签一起使用,然后按重塑,添加用于追加所有缺少的组合,排序
多索引,最后将其展平:

max_num = (df.loc[df.groupby(['Item','Group','Direction'])['Value']
             .idxmax()]
            .pivot('Item', ['Direction','Group'], ['Value','Label'])
             .rename(columns={'Label':'ID'})
             )

max_num = max_num.reindex(pd.MultiIndex.from_product(max_num.columns.levels), axis=1)
max_num['Value'] = max_num['Value'].fillna(0)

max_num = max_num.sort_index(level=[2,1], axis=1, ascending=[True, False])
max_num.columns = [f'{x[2]}_{x[1]}_{x[0]}' for x in max_num.columns]
max_num = max_num.reset_index()
print (max_num)
   Item Green_Up_ID  Green_Up_Value  Green_Down_ID  Green_Down_Value  \
0    10           M           310.0            NaN               0.0   

  Red_Up_ID  Red_Up_Value Red_Down_ID  Red_Down_Value  
0         D         260.0           B           300.0  

df[df['Value']==df['Value'].max()]['Label'].values[0]
这就是您要做的吗?我收到一个错误:
KeyError:'Level Group not found'
在数据透视上检查列名。我已经根据您提供的示例df发布了工作代码。很抱歉,
.pivot
不起作用,但
pivot\u table
起作用。我需要升级pandas
.pivot\u table
我得到一个类似的错误,如下所示。显然,建议使用
.pivot\u table
而不是
。pivot
。这是可行的,但是需要修改排序索引amended@jonboy-好的,我们需要升级熊猫,有可能吗?是的,成功了。唯一的问题是为缺少的值插入0和nan。@jonboy-我看到了,正在为它工作。@jonboy-添加到答案中。