如何基于熊猫的最大列返回值?

时间:2020-07-01 03:47:48

标签: python pandas dataframe max

输入

df
   
A   B   C
0   0   0
1   2   4
5   8   7
9   1   1
8   8   8

所有值≥0

目标

A   B   C   D
0   0   0   unk
1   2   4   Z
5   8   7   Y
9   1   1   X
8   8   8   balance

返回D列,详细信息如下:

  • 返回值基于A/B/C列中的最大值
  • 如果A中的最大值,则D的值为X,B为Y,C为Z,并且所有值不得相同。
  • 如果A/B/C中的所有值都相同,则当相同值为0时,返回unk。如果相同的值不为0,则返回余额。

尝试

我搜索了idxmaxmax(axis=1)之类的东西,但没有得到,尤其是balanceunk

2 个答案:

答案 0 :(得分:1)

import numpy as np
key_map={0:'X',1:'Y',2:'Z'}
def mapper(row):
    if row['A']==row['B']==row['C']:
        if row['A']==0:
             return 'unk'
        else:
             return 'balance'
    else:
        column=np.argmax([row['A'],row['B'],row['C']])
        return key_map[column]
df['D']=df.apply(mapper,axis=1)

说明:创建字典“ key_map”。使用apply(),根据提到的条件调用mapper()并返回值

答案 1 :(得分:0)

让我们尝试一下您的逻辑:

# extract max and min
max_vals, min_vals = df.max(1), df.min(1)

# extract columns with max values
idxmax = df.idxmax(1)

# map the column names
key_map={'A':'X', 'B':'Y', 'C':'Z'}

df['D'] = np.select((max_vals==0, max_vals==min_vals),
                    ('unk','balance'), idxmax.map(key_map)
                   )

输出:

   A  B  C        D
0  0  0  0      unk
1  1  2  4        Z
2  5  8  7        Y
3  9  1  1        X
4  8  8  8  balance