测试一个数据框中的单元格与另一个数据框中的单元格

Test cells in one dataframe against those in another

import numpy as np
import pandas as pd

# From:
df1=pd.DataFrame({ 'col1':[1,3,5,7,9], 'col2':[2,4,6,8,10] } )

df2=pd.DataFrame({ 'col1':[5,5,5,5,5], 'col2':[6,6,6,6,6] } )

df3=pd.DataFrame({ 'col1':[2,2,2,2,2], 'col2':[3,3,3,3,3] } )


# I want to get:

df4=pd.DataFrame({ 'col1':[1,0,0,1,1], 'col2':[1,0,0,1,1] } )

df4 中每个单元格的计算公式为:

if ( ( df1['colX'][Y] > df2['colX'][Y] ) or ( df1['colX'][Y] < df3['colX'][Y] ) ):
    df4['colX'][Y] = 1
else:
    df4['colX'][Y] = 0

换句话说,如果df1中的单元格值不在df2df3中的值之间,在相同的位置,设置一个标志。

这是一个函数,所以行数和列数(XY)不固定。

我可以通过遍历所有的列和行来做到这一点,但那样会更慢,而且我认为 pandas 不会这样做。

您已经完成了几乎所有的工作,您只需要使用广播和布尔索引将其翻译成pandas

( df1['colX'][Y] > df2['colX'][Y] ) 变为 (df1>df2)

or 变为|

((df1>df2)|(df1<df3))

    col1    col2
0   True    True
1   False   False
2   False   False
3   True    True
4   True    True

((df1>df2)|(df1<df3)).astype(int)

    col1    col2
0   1   1
1   0   0
2   0   0
3   1   1
4   1   1