Python Dataframe不返回所需的结果
21和所有列+或2013:2016+,2012-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
解释很简单-
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)和Trueg
-11True
,31True
,87True
,所以代码不对,我知道。我需要改变什么?总计>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])