首页 > 解决方案 > 有效地获取 np.datetime64 元素列表中不同日期的数量

问题描述

我有以下代码:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

x = np.arange(0,2*np.pi,0.00001*np.pi)
base = datetime(2000, 1, 1)
arr = np.array([base + timedelta(minutes=i) for i in range(len(x))])
y = np.sin(x)
df = pd.DataFrame({'dates': [np.datetime64(x) for x in arr], 'vals': y})

它使用 1 分钟数据创建以下数据框:

                dates      vals
0 2000-01-01 00:00:00  0.000000
1 2000-01-01 00:01:00  0.000031
2 2000-01-01 00:02:00  0.000063
3 2000-01-01 00:03:00  0.000094
4 2000-01-01 00:04:00  0.000126

我想有效地检索yyyy-mm-dd格式中不同日期的数量。

我目前的解决方案如下,但似乎很慢:

distinct_days = set([str(i.date()) for i in pd.to_datetime(df['dates'])])

{'2000-03-29', '2000-02-14', '2000-01-30', '2000-03-04',...

然后我只是len(distinct_days)为了得到想要的结果(即139)。

有没有办法更快地做到这一点?

标签: pythonpandasdataframedatetime

解决方案


您可以使用 pandas 本身尝试一些更简单的方法:

>>> df["only_date"] = df["date"].dt.date
>>> df["only_date"].nunique()
# 139

推荐阅读