示例数据
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] 选择列
另请注意:月/年不必是一列。它也可以是带有月份的列和带有年份的列。重要的是每个平均值都包含日期。
最佳答案
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
关于python-3.x - Pandas Groupby 结果中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50844112/