Python计算数据框列值满足条件的数量

3
有没有更优雅的方式来写代码:
df[df['income'] > 0].count()['income']

我希望能够简单地计算满足条件的列值数量(在这个例子中,条件仅为大于零,但我希望有一种适用于任何任意条件或一组条件的方法)。如果列名不需要两次出现在表达式中,那么显然更优雅。应该很容易。


我看到了你的编辑,这很让人烦恼,因为那是你在回答之前应该添加到问题中的重要信息。 - cs95
无论如何,我不明白为什么你不能从任何条件创建一个掩码并在其上调用 mask.sum() - cs95
@coldspeed,在开始时就已经有这个重要信息了,我只是在看到你的答案后更加强调了它。从一开始问题的标题中也非常明显!不过还是很抱歉并感谢你。 - matanster
1个回答

5
df = pd.DataFrame([0, 30000, 75000, -300, 23000], columns=['income'])
print(df)
   income
0       0
1   30000
2   75000
3    -300
4   23000

如果您想计算一列中符合比仅仅是正数更复杂的条件,例如“值在5000到25000范围内”,则可以使用两种方法。
第一种方法是使用布尔索引。
((df['income'] > 5000) & (df['income'] < 25000)).sum()

第二步,对该系列的每一行应用一个函数。
df['income'].map(lambda x: 5000 < x < 25000).sum()

请注意,第二种方法允许任意复杂的条件,但比使用基础数组上的低级操作的第一种方法要慢得多。有关更多信息,请参见布尔索引文档

真的没有更熊猫化的东西了吗? :-) - matanster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接