Numpy 在这些类型的操作上比 pandas 慢,就像 np.unique 排序一样,而 pandas 中的机器不需要。此外,这更惯用。
熊猫
In [22]: %%timeit
....: i = Index(dates)
....: i[i.value_counts()>20]
....:
10 loops, best of 3: 78.2 ms per loop
In [23]: i = Index(dates)
In [24]: i[i.value_counts()>20]
Out[24]:
DatetimeIndex(['2013-06-16 20:40:00', '2013-05-28 03:00:00', '2013-10-31 19:50:00', '2014-06-20 13:00:00', '2013-07-08 21:40:00', '2012-02-26 17:00:00', '2013-01-02 15:40:00', '2012-08-24 02:00:00',
'2014-10-17 08:20:00', '2012-07-27 20:10:00',
...
'2014-08-07 05:10:00', '2014-05-21 08:10:00', '2014-03-09 12:50:00', '2013-05-10 02:30:00', '2013-04-15 20:20:00', '2012-06-23 05:20:00', '2012-07-06 16:10:00', '2013-02-14 12:20:00',
'2014-10-27 03:10:00', '2013-09-04 12:00:00'],
dtype='datetime64[ns]', length=2978, freq=None)
In [25]: len(i[i.value_counts()>20])
Out[25]: 2978
Numpy(来自其他解决方案)
In [26]: %%timeit
values, counts = np.unique(dates, return_counts=True)
filtered_dates = values[counts>20]
....:
10 loops, best of 3: 145 ms per loop
In [27]: filtered_dates = values[counts>20]
In [28]: len(filtered_dates)
Out[28]: 2978