我想快速轻松地检查 counts
的所有列值在数据框中是否相同:
在:
import pandas as pd
d = {'names': ['Jim', 'Ted', 'Mal', 'Ted'], 'counts': [3, 4, 3, 3]}
pd.DataFrame(data=d)
出去:
names counts
0 Jim 3
1 Ted 4
2 Mal 3
3 Ted 3
我只想要一个简单的条件 if all counts = same value
然后 print('True')
。
有没有快速的方法来做到这一点?
原文由 HelloToEarth 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种有效的方法是将第一个值与其余值进行比较,并使用
all
:尽管最直观的想法可能是计算
unique
值的数量并检查是否只有一个,但这对于我们要尝试做的事情来说会产生不必要的高复杂度。 Numpy 的np.unique
被 pandas 调用nunique
,实现了底层数组的排序,其平均复杂度为O(n·log(n))
( aesortab-default-6fd45 using).上面的方法是O(n)
。当我们将其应用于整个数据帧时,性能差异变得更加明显(见下文)。
对于整个数据框
如果想要在整个数据帧上执行相同的任务,我们可以通过在
all
axis=0
来扩展上述内容:对于共享示例,我们将得到:
这是上述方法与其他一些方法(例如使用
nunique
(对于pd.Series
)相比的基准):以下是
pd.DataFrame
的时间。让我们也与numba
方法进行比较,这在这里特别有用,因为我们可以在给定列中看到重复值时立即利用快捷方式( _注意:numba 方法仅适用于数值数据_):如果我们比较这三种方法: