Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧日期时间索引groupby_Python_Pandas_Dataframe_Datetime - Fatal编程技术网

Python 数据帧日期时间索引groupby

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个数据点的绘图?我试着做到以下几点:

考虑到我有以下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个数据点的绘图?我试着做到以下几点:

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()