我有一个带有日期和小时/分钟的df列:
0 2019-09-13 06:00:00
1 2019-09-13 06:05:00
2 2019-09-13 06:10:00
3 2019-09-13 06:15:00
4 2019-09-13 06:20:00
Name: Date, dtype: datetime64[ns]
我需要计算数据框包含多少天。
我这样尝试过:
sample_length = len(df.groupby(df['Date'].dt.date).first())
和
sample_length = len(df.groupby(df['Date'].dt.date))
但是我得到的电话号码似乎不对。您知道另一种计算天数的方法吗?
答案 0 :(得分:1)
考虑样本日期:
sample = pd.date_range('2019-09-12 06:00:00', periods=50, freq='4h')
df = pd.DataFrame({'date': sample})
date
0 2019-09-12 06:00:00
1 2019-09-12 10:00:00
2 2019-09-12 14:00:00
3 2019-09-12 18:00:00
4 2019-09-12 22:00:00
5 2019-09-13 02:00:00
6 2019-09-13 06:00:00
...
47 2019-09-20 02:00:00
48 2019-09-20 06:00:00
49 2019-09-20 10:00:00
使用DataFrame.groupby
对df['date'].dt.date
上的数据框进行分组,并使用aggregate
函数GroupBy.size
:
count = df.groupby(df['date'].dt.date).size()
# print(count)
date
2019-09-12 5
2019-09-13 6
2019-09-14 6
2019-09-15 6
2019-09-16 6
2019-09-17 6
2019-09-18 6
2019-09-19 6
2019-09-20 3
dtype: int64
答案 1 :(得分:1)
我不确定您要在这里做什么。您是否要计算唯一的天(星期一/星期二/ ...),每月的日期(1-31 ish),每年的日期(1-365),还是唯一的日期(从时间开始算起的唯一天数)?
从pandas系列中,您可以使用{series}.value_counts()
来获取每个唯一值的条目数,或者简单地使用{series}.unique()
来获取所有唯一值
import pandas as pd
df = pd.DataFrame(pd.DatetimeIndex(['2016-10-08 07:34:13', '2015-11-15 06:12:48',
'2015-01-24 10:11:04', '2015-03-26 16:23:53',
'2017-04-01 00:38:21', '2015-03-19 03:47:54',
'2015-12-30 07:32:32', '2015-11-10 20:39:36',
'2015-06-24 05:48:09', '2015-03-19 16:05:19'],
dtype='datetime64[ns]', freq=None), columns = ["date"])
天(星期一/星期二/...):
df.date.dt.dayofweek.value_counts()
每月日期(1-31 ish)
df.date.dt.day.value_counts()
每年的日期(1-365)
df.date.dt.dayofyear.value_counts()
唯一的日期(从时间开始算起的唯一天数)
df.date.dt.date.value_counts()
要从上述任何一项中获取唯一条目的数量,只需添加.shape[0]
答案 2 :(得分:0)
import pandas as pd
df = pd.DataFrame({'Date': ['2019-09-13 06:00:00',
'2019-09-13 06:05:00',
'2019-09-13 06:10:00',
'2019-09-13 06:15:00',
'2019-09-13 06:20:00']
},
dtype = 'datetime64[ns]'
)
df = df.set_index('Date')
_count_of_days = df.resample('D').first().shape[0]
print(_count_of_days)
答案 3 :(得分:0)
为了计算给定时间序列数据示例中唯一日期的总数,我们可以使用:
print(len(pd.to_datetime(df['Date']).dt.date.unique()))