【问题标题】:pandas grouping by day of year (removing leap-days ) results in 366 resultspandas 按一年中的某一天分组(去除闰日)得到 366 个结果
【发布时间】:2018-04-11 19:32:14
【问题描述】:

我正在尝试获取一年中每一天的最小 T,数据来自十年。首先,我删除了闰日(我已经测试过它可以工作并且有 29-02)但是当我将它们分组并获得最低温度时,它会产生 366 行,并且它们都不是 0!

当我只对一年的数据进行分组时,它会产生 365 行,我用闰年和非闰年对其进行了测试,所有结果都是 365,问题是将不同年份的数据放在一起,总是给我 366 行.有什么线索吗?

df = df[~df['Date'].str.endswith('02-29')]

# print(df.sort_values(by='Date'))
df['Date'] = pd.to_datetime(df['Date'])
#I have also tried with this, same result
#df = df[~((df['Date'].dt.day==29)&(df['Date'].dt.month==2))]


temp_max = df[(df['Element'] == 'TMAX') & (df['Date'] > '01-01-2005') & (df['Date'] < '31-12-2014')].groupby(
    [df['Date'].dt.dayofyear]).agg(np.max)['Data_Value'] 

我首先使用字符串函数删除闰日,然后将其转换为日期时间格式,但效果很好

从输入这个:

print(df.head())
print(len(df))
df = df[~df['Date'].str.endswith('02-29')]
print(df.head())
print(len(df))

我明白了

            ID        Date Element  Data_Value
0  SPE00120107  2009-05-31    TMAX         313
1  SP000003195  2015-09-10    TMIN         174
2  SPE00120107  2015-08-02    TMIN         148
3  SPE00120107  2009-05-31    TMIN          99
4  SPE00120287  2010-12-17    TMIN         -55
47304
            ID        Date Element  Data_Value
0  SPE00120107  2009-05-31    TMAX         313
1  SP000003195  2015-09-10    TMIN         174
2  SPE00120107  2015-08-02    TMIN         148
3  SPE00120107  2009-05-31    TMIN          99
4  SPE00120287  2010-12-17    TMIN         -55
47280

感谢您的帮助!

【问题讨论】:

  • 请在df = df[~df['Date'].str.endswith('02-29')]之前显示df['Date'].head()
  • 另外,输入df['Date'].dtype 并显示输出
  • 这看起来很像密歇根大学 Coursera 上的 Python 应用绘图、图表和数据表示课程的家庭作业的一部分。

标签: python pandas datetime leap-year


【解决方案1】:

一年中的某一天为您提供当年的某一天。如果那年恰好是闰年,那么 3 月 1 日将给您 61 天,而不管数据集中还有什么。该函数不会在您的数据集中添加天数来为您提供该数量(这就是您所假设的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2020-09-07
    相关资源
    最近更新 更多