如何在列中查找值并在Python中返回列名

如何在列中查找值并在Python中返回列名,python,pandas,max,Python,Pandas,Max,我有下面的透视表,最后一列返回行的最大值 totalCount max hours 0 1 2 3 ... 21 22 23 username user_1 3 0 0 5

我有下面的透视表,最后一列返回行的最大值

            totalCount                          max
hours           0   1   2   3   ... 21  22  23  
    username                                                                                    
    user_1      3   0   0   5   ... 0   0   1   5
    user_2      0   0   6   0   ... 2   4   0   6   
    user_3      5   0   0   3   ... 0   0   1   5
    user_4      0   2   3   0   ... 0   8   0   8
    user_5      1   4   0   0   ... 5   9   2   9
现在我想添加另一列“hour”,它返回最大值所属列的名称

输出将如下所示:

            totalCount                          max hour
hours           0   1   2   3   ... 21  22  23  
    username                                                                                    
    user_1      3   0   0   5   ... 0   0   1   5   3
    user_2      0   0   6   0   ... 2   4   0   6   2
    user_3      5   0   0   3   ... 0   0   1   5   0
    user_4      0   2   3   0   ... 0   8   0   8   22
    user_5      1   4   0   0   ... 5   9   2   9   22
您知道如何创建此列以查找列名吗

如果在不同的列中重复最大值会怎么样?我猜会返回第一个具有该值的列的名称,但是否有任何代码可以获取出现该最大值的所有列的名称?(这是一个额外的问题,如果您能回答,我将不胜感激,但主要问题是前一个问题)。

您可以使用
.idxmax()
,它返回max元素的索引并与
耦合。在
轴=1上应用

df['where_max'] = df.apply(lambda x: x.idxmax(), axis=1)
最简单的例子:

df = pd.DataFrame(data={'x': [1, 3, 4, 7], 'wave': [2, 2, 10, 0], 'y': [0,0,0,15]})
df['where_max'] = df.apply(lambda x : x.idxmax(), axis=1)

    x   wave    y   where_max
0   1   2       0   wave
1   3   2       0   x
2   4   10      0   wave
3   7   0       15  y

谢谢它适用于您的情况,但适用于我的情况,而不是仅获取列
中的值,其中\u max
我得到的示例是:
(totalCount,19)
。我怎么能像你的例子那样只得到
19
的值呢?我想这是因为你有一个多级索引。您可以轻松地对其进行切片
.apply(lambda x:x.idxmax()[1],axis=1)
这正是我想要的。谢谢