【问题标题】:How to find a value in columns and return the column name in Python如何在列中查找值并在 Python 中返回列名
【发布时间】:2020-01-04 17:40:39
【问题描述】:

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

            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

关于如何创建此列以找到列名的任何想法?

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

【问题讨论】:

    标签: python pandas max


    【解决方案1】:

    您可以使用.idxmax(),它返回与.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
    

    【讨论】:

    • 谢谢。它适用于您的情况,但在我的情况下,而不是仅获取列 where_max 中的值,例如:(totalCount, 19)。我怎么能像你的情况一样只得到19 的值?
    • 我猜那是因为你有一个 MultiLevelIndex。你可以轻松切片.apply(lambda x: x.idxmax()[1], axis=1)
    • 正是我想要的。谢谢!
    猜你喜欢
    • 2019-03-17
    • 2020-05-09
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多