2015-05-12 63 views
0

我有一個超過10,000行和超過400列的表。對於至少包含字符串'xyz'的列,我需要找到每行(在'xyz'列中)的最大值,並創建2個新列。返回一組列的每一行的最大值

第一個新列將包含這些「xyz」列的每一行的最大值。

第二個新列將包含檢索最大值的列名稱。我被困在創建第二列。我嘗試了一些不起作用的東西;

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

應該如何接近第二欄?

回答

0

這是否適合您?

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 
+0

謝謝。這很完美。 – David

+0

我是一個總共noob在這一切。如果你可以一行一行地解釋每條線的功能,那就像天堂的法力值 – David

3

使用'正則表達式'和'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 
+0

那就是漂亮的代碼。你可以將'df.filter(regex ='xyz')'保存在一個變量中。 – fixxxer

+0

對!謝謝 .. –

相關問題