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谢谢@奇怪,它没有引起错误。。。非常感谢你!