我需要数据框中负值的总数。我能够获取数组但无法找到 DataFrame。对于我正在使用下面代码的数组,任何人都可以建议我如何获取下面 DataFrame 的计数。
sum(n<0 for n in numbers)
下面是我的数据框,预期结果是 4
a b c d
-3 -2 -1 1
-2 2 3 4
4 5 7 8
原文由 Sanchit Aluna 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要数据框中负值的总数。我能够获取数组但无法找到 DataFrame。对于我正在使用下面代码的数组,任何人都可以建议我如何获取下面 DataFrame 的计数。
sum(n<0 for n in numbers)
下面是我的数据框,预期结果是 4
a b c d
-3 -2 -1 1
-2 2 3 4
4 5 7 8
原文由 Sanchit Aluna 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以调用 .lt
将 df 与标量值进行比较,然后调用 sum
两次(这是因为它首先按行求和)
In [66]:
df.lt(0).sum()
Out[66]:
a 2
b 1
c 1
d 0
dtype: int64
再次调用 sum
对 Series
求和:
In [58]:
df.lt(0).sum().sum()
Out[58]:
4
您还可以将布尔 df 转换为一维数组并调用 np.sum
:
In [62]:
np.sum((df < 0).values.ravel())
Out[62]:
4
时序
对于 30K 行 df:
In [70]:
%timeit sum(n < 0 for n in df.values.flatten())
%timeit df.lt(0).sum().sum()
%timeit np.sum((df < 0).values.ravel())
1 loops, best of 3: 405 ms per loop
100 loops, best of 3: 2.36 ms per loop
1000 loops, best of 3: 770 µs per loop
np 方法在这里轻松胜出,比循环方法快 525 倍,比纯 pandas 方法快 4 倍
原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答865 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
可以将 DataFrame 展平以使用对一维数组进行操作的函数。因此,如果您对此表示满意(可能比 EdChum 的回答慢):