Pandas列名称的最大单元格值

spi*_*iff 2 python max dataframe pandas cumsum

我有一个df,在最左边的列中有一些代码,在其他列中有一个前向轮廓(下面的df1)

DF1:

   code        tp1        tp2        tp3        tp4        tp5       tp6  \
0  1111   0.000000   0.000000   0.018714   0.127218   0.070055  0.084065   
1   222   0.000000   0.000000   0.000418   0.000000   0.017540  0.003015   
2   333   1.146815   1.305678   0.384918   0.688284   0.000000  0.000000   
3   444   0.000000   0.000000   1.838797   0.000000   0.000000  0.000000   
4   555  27.190002  27.134837  24.137560  17.739465  11.990806  8.631395   
5   666   0.000000   0.000000   0.000000   0.000000   0.000000  0.000000   

        tp7        tp8        tp9       tp10  
0  0.019707   0.000000   0.000000   0.000000  
1  6.594860  10.535905  15.697232  21.035824  
2  0.000000   0.000000   0.000000   0.000000  
3  0.000000   0.000000   0.000000   0.000000  
4  7.476197   6.461532   5.570051   4.730345  
5  0.000000   0.000068   0.000000   0.000000  
Run Code Online (Sandbox Code Playgroud)

我希望输出为3列df(下面的df2),它具有单元格的列名(对于每个代码),其具有最后一个数字(+ ve或-ve),之后只有0.第二列(tp_with_max_num)将具有具有最大此类数字的列名称.

DF2:

   code max_tp tp_with_max_num
0  1111    tp7             tp4
1   222   tp10            tp10
2   333    tp4             tp2
3   444    tp3             tp3
4   555   tp10             tp1
5   666    tp8             tp8
Run Code Online (Sandbox Code Playgroud)

使用此:列的名称,包含 我能够获得第3列的最大值:

input_df['tp_with_max_num'] = input_df.ix[0:6,1:].apply(lambda x: input_df.columns[1:][x == x.max()][0], axis=1)
Run Code Online (Sandbox Code Playgroud)

我无法解决df2中的第二列....

ayh*_*han 5

知道idxmax返回第一个最大值的索引,你可以使用cumsum来找到只有零的列:

df.ix[:, 'tp1':].cumsum(axis=1).idxmax(axis=1)
Out[61]: 
0     tp7
1    tp10
2     tp4
3     tp3
4    tp10
5     tp8
dtype: object
Run Code Online (Sandbox Code Playgroud)