我有一个相对较大的10年的天气数据集,我想按一年中的每一天分组,以获得每一天的10年低点或高点,因此使用groupby
我以这种方式创建了一个列:
df['dms'] = df['Date'].dt.strftime('%j')
问题是当我使用dt.strftime('%j')
时,我会在同一天得到两个数字,这很奇怪,例如,当我只在12月31日之前过滤,我会value_counts()
,我会得到以下结果:
365 363
366 82
Name: dms, dtype: int64
另一方面,如果我这样做,一切都会很好
Dec-31 445
Name: dm, dtype: int64
我甚至做了dt.strftime('%b-%d-%r').value_counts()
,我得到了同样正确的过滤器
Dec-31-12:00:00 AM 445
Name: Date, dtype: int64
在%j
案的幕后到底发生了什么
让我们考虑以下数据:
在上面的数据中,
2016
和2020
是闰年,2月29日是额外的一天,以弥补实际年份为365天8小时的事实(因此每四年,闰年/闰日都存在,因为我们将前三年额外的8小时之和(3 X 8=24),这就是为什么我们有闰日!),因此,我们应该期望在上述几年内返回366
和%j
,当我们这样做时:但是,当您执行
value_counts()
时,它将返回:这也是预期的行为,因此
%j
在幕后正常工作,因为它适应闰年%j返回年份001-366的日数(366表示闰年,365表示其他)。由于您的数据跨越10年,366将是闰年的有效日期
相关问题 更多 >
编程相关推荐