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

时间:2019-09-01 07:52:18

标签: python pandas max

我有以下数据透视表,最后一列返回该行的最大值。

            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

现在,我想添加另一列“小时”,以返回最大值所属的列的名称。

输出如下:

            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

关于如何创建可查找列名的列的任何想法?

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

1 个答案:

答案 0 :(得分:0)

您可以使用.idxmax()返回max元素的索引,并在.apply上返回axis=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
相关问题