【问题标题】:Return max value of each row of a group of columns返回一组列的每一行的最大值
【发布时间】:2015-05-12 14:00:28
【问题描述】:

我有一个包含 10,000 多行和 400 多列的表格。对于至少包含字符串“xyz”的列,我需要找到每行的最大值(在这些“xyz”列中),并创建 2 个新列。

第一个新列将包含这些“xyz”列的每一行的最大值。

第二个新列将包含从中检索最大值的列名。我坚持创建第二列。我尝试了一些不起作用的东西;

Match = df[CompCol].isin[SpecList].all(axis=1)

应该如何接近第二列?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    另一种使用“正则表达式”和“idmax”的方式。

        df = pd.DataFrame({'xyz1': [10, 20, 30, 40], 'xyz2': [11, 12,13,14],'xyz3':[1,2,3,44],'abc':[100,101,102,103]})
    
        df['maxval']= df.filter(regex='xyz').apply(max, axis=1)
    
        df['maxval_col'] = df.filter(regex='xyz').idxmax(axis=1)
    
    
        abc    xyz1  xyz2  xyz3  maxval   maxval_col
        100    10    11     1      11     xyz2
        101    20    12     2      20     xyz1
        102    30    13     3      30     xyz1
        103    40    14    44      44     xyz3
    

    【讨论】:

    • 那是精巧的代码。您可能可以将 df.filter(regex='xyz') 保存在变量中。
    【解决方案2】:

    这对你有用吗?

    import pandas as pd
    df = pd.DataFrame([(1,2,3,4),(2,1,1,4)], columns = ['xyz1','xyz2','xyz3','abc'])
    cols = [k for k in df.columns if 'xyz' in k]
    
    df['maxval'] = df[cols].apply(lambda s: max(zip(s, s.keys()))[0],1)
    df['maxcol'] = df[cols].apply(lambda s: max(zip(s, s.keys()))[1],1)
    
    df
    
    Out[753]: 
       xyz1  xyz2  xyz3  abc  maxval maxcol
    0     1     2     3    4       3   xyz3
    1     2     1     1    4       2   xyz1
    

    【讨论】:

    • 谢谢。这是完美的。
    • 我完全是个菜鸟。如果你能逐行解释每一行的作用,那就像来自天堂的法力
    猜你喜欢
    • 2012-05-07
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多