输入
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,则返回余额。尝试
我搜索了idxmax
或max(axis=1)
之类的东西,但没有得到,尤其是balance
和unk
。
答案 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