Pandas选择列是动态的行,并且单个列的值大于零

时间:2017-04-23 21:02:42

标签: python pandas dataframe

假设创建了一个DataFrame,其中列和列名称是动态的。 所以你可以有一个像DataFrame:

two = pd.DataFrame({'one' : pd.Series([10, 0, 10], index=['a', 'b', 'c']),
   'two' : pd.Series([0, 0, 10.], index=['a', 'b', 'c'])})

 one   two
a   10   0.0
b    0   0.0
c   10  10.0

或者您可以使用以下数据框:

three = pd.DataFrame({'blue' : pd.Series([10, 0, 10], index=['a', 'b', 'c']),
   'red' : pd.Series([0, 0, 10], index=['a', 'b', 'c']),
   'two' : pd.Series([0, 0, 10], index=['a', 'b', 'c'])})

   blue  red  two
a    10    0    0
b     0    0    0
c    10   10   10

所以在运行时之前你不知道有多少列或列名。列数没有限制。

如何选择只有一列大于零的行?

因此,对于给定的行,如果所有列值都为零,或者如果多个列值大于零,则从选择中排除。

从以上两个例子中我可以恭敬地输出:

   one  two
a   10    0

   blue  red  two
a    10    0    0

2 个答案:

答案 0 :(得分:1)

检查整个DataFrame中的条件和行之和。如果等于1,则条件成立:

two.loc[(two>0).sum(axis=1)==1]
Out: 
   one  two
a   10  0.0


three.loc[(three>0).sum(axis=1)==1]
Out: 
   blue  red  two
a    10    0    0

或者使用lambda:

three.loc[lambda x: (x>0).sum(axis=1)==1]
Out: 
   blue  red  two
a    10    0    0

答案 1 :(得分:0)

两个[两个[两个] 0] .count(axis = 1)> 0]。头(1)

说你有

two = pd.DataFrame({'one' : pd.Series([10, 0, 10, 9], index=['a', 'b', 'c', 'd']), 'two' : pd.Series([0, 0, 10., 4.6], index=['a', 'b', 'c', 'd']), 'three' : pd.Series([5, -1, 7, -1], index=['a', 'b', 'c', 'd'])})

enter image description here enter image description here

选择至少有一列有值的行大于0 head(1)将选择第一行

enter image description here
参考:pandas: How do I select rows based on if X number of columns is greater than a number?