python - 有效地获取 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
)。
有没有办法更快地做到这一点?
解决方案
您可以使用 pandas 本身尝试一些更简单的方法:
>>> df["only_date"] = df["date"].dt.date
>>> df["only_date"].nunique()
# 139
推荐阅读
- scrapy - 热使用scrapy deltafetch_key和CrawlSpider
- java - 如何使用spring boot java在Ignite中创建表?
- python - 如何计算 groupby 中缺少信息的唯一组的数量?
- javascript - 在react native中不要更改第二层和第三层的checked
- java - 一分钟不活动后关闭 TCP 连接
- javascript - 想要使用输入字段更改视频 src
- javascript - 在入口点自动加载块
- perl - 在 for/while 循环中通过 HTTP POST 查询重用 LWP Useragent 对象
- javascript - 解析
作为字符串 HTML 一部分的标签 - javascript - 如何从特定数组中添加/求和所需的数组索引?