结果中的Pandas Groupby列

时间:2018-06-13 18:39:41

标签: 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.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_name]

选择列

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

1 个答案:

答案 0 :(得分:4)

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