测试一个数据框中的单元格与另一个数据框中的单元格
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中的单元格值不在df2
和df3
中的值之间,在相同的位置,设置一个标志。
这是一个函数,所以行数和列数(X
和Y
)不固定。
我可以通过遍历所有的列和行来做到这一点,但那样会更慢,而且我认为 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
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中的单元格值不在df2
和df3
中的值之间,在相同的位置,设置一个标志。
这是一个函数,所以行数和列数(X
和Y
)不固定。
我可以通过遍历所有的列和行来做到这一点,但那样会更慢,而且我认为 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