大熊猫按年份分组(删除闰天)会产生366个结果

时间:2017-10-30 18:13:44

标签: python pandas datetime leap-year

我试图获得一年中每一天的最小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'] 

我首先使用字符串函数删除闰日,然后将其转换为datetime格式,但这样可以正常工作

输入此内容:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一年中的

日为您提供该年中的一年中的哪一天。如果该年恰好是a年,那么3月1日将给您61天,无论数据集中还有什么。该函数不会在您的数据集中累加几天来给您这个金额(这就是您假设的样子)