Python 数据帧日期时间索引groupby
考虑到我有以下tmax_周期数据帧:Python 数据帧日期时间索引groupby,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,考虑到我有以下tmax_周期数据帧: ID元素数据\u值 日期 2005-01-01 USW00014853 TMAX 56 2005-01-01 USC000228 TMAX 150 2005-01-01 USC0207320 TMAX 150 2005-01-01 USC0207308 TMAX 150 2005-01-01 USC000230 TMAX 122 如何按月和日对行进行分组,并将max函数应用于Data_Value列,以便以后构建包含365个数据点的绘图?我试着做到以下几点:
ID元素数据\u值
日期
2005-01-01 USW00014853 TMAX 56
2005-01-01 USC000228 TMAX 150
2005-01-01 USC0207320 TMAX 150
2005-01-01 USC0207308 TMAX 150
2005-01-01 USC000230 TMAX 122
如何按月和日对行进行分组,并将max函数应用于Data_Value列,以便以后构建包含365个数据点的绘图?我试着做到以下几点:
tmax_period.groupby(by=[period.index.month,period.index.day])['Data_Value'].max()
但我得到了一个“AssertionError:Grouper和axis的长度必须相同”的错误
编辑:将tmax\u period.head()的结果添加到dict()
中,如评论中所述:
{'Data_Value':{Timestamp('2005-01-01 00:00:00'):122},
'Element':{Timestamp('2005-01-01 00:00:00'):'TMAX'},
'ID':{时间戳('2005-01-01 00:00:00'):'USC000230'}
日期范围包括闰年,因此按月和日进行聚合显然会产生366个数据点。以下是一个例子:
s = pd.Series(data=1,
index=pd.date_range(start='2005-01-01',
end='2014-12-31',
freq='d'),
name='x')
s.groupby([s.index.month, s.index.day]).count(). # has 366 elements, inc Feb 29
groupby
命令包含366个元素
DatetimeIndex是如何创建的?日期范围包括闰年,因此按月和日进行聚合显然会产生366个数据点。以下是一个例子:
s = pd.Series(data=1,
index=pd.date_range(start='2005-01-01',
end='2014-12-31',
freq='d'),
name='x')
s.groupby([s.index.month, s.index.day]).count(). # has 366 elements, inc Feb 29
groupby
命令包含366个元素
DatetimeIndex是如何创建的?我发现当按索引级别分组或按日期时间频率分组(或者在本例中,两者都是)时,
pd.Grouper
是最容易使用的
这将创建两个
Grouper
对象,分别在第0个索引级别上按月(开始)和日进行聚合。我发现pd.Grouper
在按索引级别分组或按日期时间频率分组(或者在本例中,两者都是)时最容易使用
这将在第0个索引级别上创建两个分别按月(开始)和日聚合的
Grouper
对象。我不知道为什么以前没有想到这个解决方案。它可以找到一年中每一天的最大值,而不会像我所希望的那样被leap one弄乱:
tmax_period=period.groupby(lambda x:(x.month,x.day))['Data_Value'].max()
我不知道为什么以前没有想到这个解决方案。它可以找到一年中每一天的最大值,而不会像我所希望的那样被leap one弄乱:
tmax_period=period.groupby(lambda x:(x.month,x.day))['Data_Value'].max()
您能复制并粘贴数据吗?请参阅:尝试:tmax\u period.head().to\u dict()
并将其复制/粘贴到您的问题中。@Scott Boston,是的,我尝试过这种方法,但dayofyear对闰年的使用不正确。您可以在非闰年中平均闰日,或者在闰年中省略闰日。您可以复制并粘贴数据吗?请参阅:尝试:tmax\u period.head().to\u dict()
并复制/粘贴到您的问题中。@Scott Boston,是的,我尝试过这种方法,但dayofyear对闰年的作用不正确。您可以在非闰年中平均闰日,或者在闰年中省略闰日。
df.groupby([
pd.Grouper(level=0, freq='MS'),
pd.Grouper(level=0, freq='D')
])['Data_Value'].max()