簡體   English   中英

pandas如何根據最大列返回值?

[英]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,則返回余額。

嘗試

我搜索了idxmaxmax(axis=1)之類的東西,但找不到,尤其是balanceunk

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM