[英]How can I create a new pandas column based on the max value of other pandas columns and the associated string column?
[英]how to return value based on max columns by pandas?
輸入
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
。
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() 並根據提到的條件返回值
讓我們試試你的邏輯:
# 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)
)
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.