Python 数据帧中的条件列:其中';错在哪里?

Python 数据帧中的条件列:其中';错在哪里?,python,pandas,dataframe,Python,Pandas,Dataframe,让我们从一个带有数字列的熊猫数据帧df,pS0和pE: import pandas as pd df = pd.DataFrame([[0.1,0.2,0.7],[0.3,0.6,0.1],[0.9,0.1,0.0]], columns=['pS','pE','pS0']) 我们想建立一个列,指出前三个中哪一个占主导地位。我是这样做到的: def class_morph(x): y = [x['pE'],x['pS'],x['pS0']]

让我们从一个带有数字列的熊猫数据帧
df
pS0
pE

import pandas as pd
df = pd.DataFrame([[0.1,0.2,0.7],[0.3,0.6,0.1],[0.9,0.1,0.0]], 
                  columns=['pS','pE','pS0'])
我们想建立一个列,指出前三个中哪一个占主导地位。我是这样做到的:

def class_morph(x):
    y = [x['pE'],x['pS'],x['pS0']]
    y.sort(reverse=True)
    if (y[0] == y[1]):
        return 'U'
    elif (x['pE'] == y[0]):
        return 'E'
    elif (x['pS'] == y[0]):
        return 'S'
    elif (x['pS0'] == y[0]):
        return 'S0'

df['Morph'] = df.apply(class_morph, axis=1)
这给出了正确的结果:

但我最初的尝试如下:

def class_morph(x):
    if (x['pE'] > np.max(x['pS'],x['pS0'])):
        return 'E'
    elif (x['pS'] > np.max(x['pE'],x['pS0'])):
        return 'S'
    elif (x['pS0'] > np.max(x['pS'],x['pE'])):
        return 'S0'
    else:
        return 'U'
它返回了一些错误:


有人能解释一下我第一次尝试时的错误吗?

除了tie,
U
的情况外,你可以使用
df.idxmax(axis=1).str[1:
df.apply(class\U morph,axis=1)
应该引起
TypeError:“float”对象不能解释为整数“
使用第二版本的
class\u morph
时。如果通过将
np.max
更改为
max
来修复该错误,
df.apply(class\u morph,axis=1)
将返回第一个(正确的)结果,而不是第二个。@John Galt谢谢@奇怪,它没有引起错误。。。非常感谢你!