在熊猫数据框中获取不同值的最有效方法是什么?

我有一个数据框,如下所示。


    0   1   2

0   A   B   C

1   B   C   B

2   B   D   E

3   C   E   E

4   B   F   A

我需要从整个 dataframe 中获取唯一值的数量,而不是按列的唯一值。在上面的数据框中,唯一值是 A、B、C、D、E、F。所以,我需要的结果是6。


我正在使用 pandas squeeze、ravel 和 nunique 函数实现这一点,这些函数将整个数据帧转换为一个系列。


pd.Series(df.squeeze().values.ravel()).nunique(dropna=True)

请让我知道是否有更好的方法来实现这一目标。


holdtom
浏览 90回答 3
3回答

30秒到达战场

numpy.unique与length唯一值一起使用:out = len(np.unique(df)) 6

慕的地10843

用于NumPy此,如:import numpy as np print(np.unique(df.values).shape[0])

浮云间

您也可以使用set, :lenflattenlen(set(df.values.flatten()))出去:6计时:使用具有 6 个唯一值的虚拟数据框#dummy datadf = pd.DataFrame({'Day':np.random.choice(['aa','bbbb','c','ddddd','EeeeE','xxx'], 10**6),'Heloo':np.random.choice(['aa','bbbb','c','ddddd','EeeeE','xxx'], 10**6)})print(df.shape)(1000000, 2)%timeit len(set(df.values.flatten()))>>>89.5 ms ± 1.56 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)%timeit np.unique(df.values).shape[0]>>>1.61 s ± 25.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)%timeit len(np.unique(df))>>>1.85 s ± 229 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python