样本数据
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]
选择列另请注意:月/年不必是一列。它也可以是包含月份的列和包含年份的列。为每个平均值包含日期非常重要。
答案 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