Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较多行值_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 比较多行值

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和其他列的值

问题更复杂,但我试图在下表中对其进行简化:

     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