Python 跨多个数据帧的布尔比较

Python 跨多个数据帧的布尔比较,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个问题,我想比较多个数据帧的值。以下是一个代码片段示例: data0 = [[1,'01-01'],[2,'01-02']] data1 = [[11,'02-30'],[12,'02-25']] data2 = [[8,'02-30'],[22,'02-25']] data3 = [[7,'02-30'],[5,'02-25']] df0 = pd.DataFrame(data0,columns=['Data',"date"]) df1 = pd.DataFrame(data1,colu

我有一个问题,我想比较多个数据帧的值。以下是一个代码片段示例:

data0 = [[1,'01-01'],[2,'01-02']]
data1 = [[11,'02-30'],[12,'02-25']]
data2 = [[8,'02-30'],[22,'02-25']]
data3 = [[7,'02-30'],[5,'02-25']]
df0 = pd.DataFrame(data0,columns=['Data',"date"])
df1 = pd.DataFrame(data1,columns=['Data',"date"])
df2 = pd.DataFrame(data2,columns=['Data',"date"])
df3 = pd.DataFrame(data3,columns=['Data',"date"])
result=(df0['Data']| df1['Data'])>(df2['Data'] | df3['Data'])
我希望看到的是,如果
df0
rowX
df1
rowX
中的值大于
df2
rowX
df3
rowX
返回
True
,否则它应该是
false
。在上述代码中,
df1
中的11大于8和7(分别为df2和3),因此结果应为真,然后对于第二行,2或12均不大于22(df2),因此应为假。然而,结果给了我很多

False,False
而不是

True,False

有什么想法或帮助吗?

您现有的解决方案不起作用,因为
运算符对元素执行按位or操作

df0.Data | df1.Data

0    11
1    14
Name: Data, dtype: int64
这将导致您比较与dataframe列中的值不同的值。总之,您的方法并不像您期望的那样比较值


您可以通过查找-

  • df0
    df1
    的每行最大值,以及
  • df2
    df3
比较这两列以检索结果-

i = np.max([df0.Data, df1.Data], axis=0)
j = np.max([df2.Data, df3.Data], axis=0)

i > j
array([ True, False], dtype=bool)
这种方法对于任何数量的数据帧都具有极高的可扩展性。

问题 对于您的数据:

>>> df0['Data']
0    1
1    2
Name: Data, dtype: int64
>>> df1['Data']
0    11
1    12
Name: Data, dtype: int64
您的a正在按位或使用
|

>>> df0['Data']| df1['Data']
0    11
1    14
Name: Data, dtype: int64
>>> df2['Data']| df3['Data']
0    15
1    23
Name: Data, dtype: int64
对单个数字执行此操作:

>>> 1 | 11
11
>>> 2 | 12
14
这不是你想要的

解决方案 您可以使用
np.max
从每个系列中查找最大值:

>>> np.maximum(df0['Data'], df1['Data']) > np.maximum(df2['Data'], df3['Data'])
0     True
1    False
Name: Data, dtype: bool

大小和列是否相同?嗯,不完全相同
np.max([a,b],axis=0)
返回一个NumPy数组,而
np.max(a,b)
如果
a
b
是序列,则返回一个序列。