Python Dataframe不返回所需的结果

Python Dataframe不返回所需的结果,python,pandas,Python,Pandas,21和所有列+或2013:2016+,2012- 解释很简单-total列是从2012到2016的总和列 -11 8 8 8 7 20 FALSE -9 8 8 8 7 22 TRUE 8 8 8 8 7 39 TRUE 4 4 4 4 4 20 FALSE 和df_而不带0)。全部(轴=1) m4=df2.total>21 印刷品(m1) 印刷品(平方米) 打印(m3) 打印(m4) 遮罩=m1和m2**和m4**m3和m4 打印(遮罩) 打印(df

21和所有列+或2013:2016+,2012-


解释很简单-
total
列是从
2012
2016
的总和列

-11 8 8 8 7   20   FALSE
 -9 8 8 8 7   22   TRUE
  8 8 8 8 7   39   TRUE
  4 4 4 4 4   20   FALSE
df_而不带
仅是从
2013
2016
的列的总和,因此总和是
31

print (-11 +  8  +  8  +  8  +  7)
20

第二个问题的答案是添加
。排序索引(轴=1,级别=1)

编辑:

如果有更多的口罩,我认为最好的测试方法是使用:

df2 = pd.concat([df1,df], axis=1)
        .sort_index(axis=1)
        .sort_index(axis=1, level=1) 

print (df2)
   #2012  2012  #2013  2013  #2014  2014  #2015  2015  #2016  2016  #total  \
A                                                                            
d      2    13      1     6      1     7      1     8      1     6       6   
g      2   -11      1     8      1     8      1     8      1     7       6   

   total  
A         
d     40  
g     20  
df_无_2012=df2.sort_索引(axis=1.loc[:,'2013':'2016']
m1=df2['2012']<0
m2=df_无_2012。总和(轴=1)>**0**
m3=(无轴的df_2012>0)。全部(轴=1)
m4=df2.total>21
印刷品(m1)
印刷品(平方米)
打印(m3)
打印(m4)
遮罩=m1和m2**和m4**m3和m4
打印(遮罩)
打印(df2[遮罩])

我知道,但不是我需要的结果。我需要的是所有列都为正的任何行,以及2013:2016为正,2012为负的任何行。对于所有这些行,我需要它们>某个值.hmm,但条件是(列2012<0或所有不带2012的列>21)和所有不带2012的列为正值。所以输出是正确的-在
g
(True或True)和True
g
-11
True
,31
True
,87
True
,所以代码不对,我知道。我需要改变什么?总计>21&所有列均为正值| 2013:2016正值和2012负值。需要第四个条件吗?对于
g
(20>21假和-11 8 7假或8 8 7真和-11真)?
print (8  +  8  +  8  +  7)
31
31 > 21
True
df2 = pd.concat([df1,df], axis=1)
        .sort_index(axis=1)
        .sort_index(axis=1, level=1) 

print (df2)
   #2012  2012  #2013  2013  #2014  2014  #2015  2015  #2016  2016  #total  \
A                                                                            
d      2    13      1     6      1     7      1     8      1     6       6   
g      2   -11      1     8      1     8      1     8      1     7       6   

   total  
A         
d     40  
g     20  
df_without_2012 = df2.sort_index(axis=1).loc[:, '2013':'2016']
m1 = df2['2012'] < 0
m2 = df_without_2012.sum(axis=1) > **0**
m3 = (df_without_2012 > 0).all(axis=1)
m4 = df2.total > 21
print (m1)
print (m2)
print (m3)
print (m4)

mask = m1 & m2 **& m4** | m3 & m4
print (mask)

print (df2[mask])