假设创建了一个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
答案 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'])})
选择至少有一列有值的行大于0
head(1)
将选择第一行
参考:pandas: How do I select rows based on if X number of columns is greater than a number?