Python 3.x 在结果中按列分组

Python 3.x 在结果中按列分组,python-3.x,pandas,Python 3.x,Pandas,样本数据 id lat lon datetime values 0 A1 32.553644 -117.061603 2007-05-11 44.90 1 A1 32.553644 -117.061603 2007-05-12 44.92 2 A2 32.553644 -117.061603 2007-05-13 44.92 3 A2 32.553644 -117.061603 2007-05-14 44.91 4 A3 32

样本数据

   id        lat         lon   datetime  values
0  A1  32.553644 -117.061603 2007-05-11  44.90
1  A1  32.553644 -117.061603 2007-05-12  44.92
2  A2  32.553644 -117.061603 2007-05-13  44.92
3  A2  32.553644 -117.061603 2007-05-14  44.91
4  A3  32.553644 -117.061603 2007-05-15  44.92
我正在尝试按id、月份、年份分组,以获得值的月平均值列

下面的代码使用月平均值生成我的DF。问题是,我希望结果包括平均值包含的月份和年份

group_cols = ['id', 'lat', 'lon', df['datetime'].dt.month, df['datetime'].dt.year]
dfmean = df.groupby(group_cols, as_index=False)['values'].mean()
这将产生以下结果:

   id       lat         lon      mean
0  A1  32.553644 -117.061603     0.373333
1  A2  32.553644 -117.061603     0.460000
2  A3  32.553644 -117.061603     0.485484
注意:以上结果是在整个1m以上记录的数据集上得出的。因此,它与提供的样品不匹配。

我期望的结果如下所示:

   id       lat         lon       date    mean
0  A1  32.553644 -117.061603     05-2007  0.373333
1  A2  32.553644 -117.061603     05-2007  0.460000
2  A3  32.553644 -117.061603     05-2007  0.485484
列的顺序是不相关的。我只需要它作为一个数据帧,这样我就可以通过df[column\u name]选择列了。

另请注意:月/年不必是一列。它也可以是带有月份的列和带有年份的列。每个平均值都应包含日期,这一点非常重要。

IIUC

df['date']=df.datetime.dt.strftime('%Y-%m')
group_cols = ['id', 'lat', 'lon', 'date']
dfmean = df.groupby(group_cols, as_index=False)['values'].mean()
dfmean
Out[399]: 
   id        lat         lon     date  values
0  A1  32.553644 -117.061603  2007-05  44.910
1  A2  32.553644 -117.061603  2007-05  44.915
2  A3  32.553644 -117.061603  2007-05  44.920

非常感谢。这个解决方案非常有效。strftime()是我所缺少的。