Python 比较多行值
我想比较每一行A和其他列的值 问题更复杂,但我试图在下表中对其进行简化:Python 比较多行值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我想比较每一行A和其他列的值 问题更复杂,但我试图在下表中对其进行简化: A B C D 0 1.3 1.0 1.1 1 1 2.5 2.9 2.6 3 2 3.1 3.0 3.2 2 结果应该如下所示: 在这里,索引0:1.3大于B、C和D中的值,然后我们返回1,否则为0 A B C D result 0 1.3 1.0 1.1 1 1 1 2.5 2.9 2.6 3 0 2
A B C D
0 1.3 1.0 1.1 1
1 2.5 2.9 2.6 3
2 3.1 3.0 3.2 2
结果应该如下所示:
在这里,索引0:1.3大于B、C和D中的值,然后我们返回1,否则为0
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
提前感谢使用
分配
创建新列使用
df.le(df.A,0)
将列'A'
与所有其他列进行比较使用
all(1)
查找所有列的True
位置使用
astype(int)
将其设置为1
或0
df.assign(result=df.lt(df.A, 0).all(1).astype(int))
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
使用
assign
创建新列使用
df.le(df.A,0)
将列'A'
与所有其他列进行比较使用
all(1)
查找所有列的True
位置使用
astype(int)
将其设置为1
或0
df.assign(result=df.lt(df.A, 0).all(1).astype(int))
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
您可以使用或进行比较,然后或获取至少一个True
或all
Trues和最后一次将布尔掩码转换为int
:
df['result'] = (~df[['B','C','D']].gt(df.A, axis=0).any(1)).astype(int)
print (df)
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
另一个解决方案:
df['result'] = df[['B','C','D']].le(df.A, axis=0).all(1).astype(int)
print (df)
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
您可以使用或进行比较,然后或获取至少一个True
或all
Trues和最后一次将布尔掩码转换为int
:
df['result'] = (~df[['B','C','D']].gt(df.A, axis=0).any(1)).astype(int)
print (df)
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
另一个解决方案:
df['result'] = df[['B','C','D']].le(df.A, axis=0).all(1).astype(int)
print (df)
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
您可以使用:
输出:
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
您可以使用:
输出:
A B C D result
0 1.3 1.0 1.1 1 1
1 2.5 2.9 2.6 3 0
2 3.1 3.0 3.2 2 0
如果您知道列名,请执行以下操作:
df['results']=(df.loc[:,'A']>df.loc[:,'B':'D'].max(axis=1)).astype(int)
如果您知道要使用列顺序,可以执行以下操作:
df['results']=(df.iloc[:,0]>df.iloc[:,1:].max(axis=1)).astype(int)
在您的示例中,它们将给出相同的输出。
末尾的“astype(int)”将布尔值转换为0/1。如果您知道列名,请执行以下操作:
df['results']=(df.loc[:,'A']>df.loc[:,'B':'D'].max(axis=1)).astype(int)
如果您知道要使用列顺序,可以执行以下操作:
df['results']=(df.iloc[:,0]>df.iloc[:,1:].max(axis=1)).astype(int)
在您的示例中,它们将给出相同的输出。
末尾的“astype(int)”将布尔值转换为0/1