python-3.x - Pandas Groupby 结果中的列

标签 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] 选择列

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

最佳答案

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/

相关文章:

Python 在 for 循环中全局导入(最好是 Python 3.x)

python - 如何从 DataFrame 中检索单个值

python - Pandas:更快地将字符串元组列表转换为数据帧?

python - Pandas 数据框 to_html 单元格对齐

python - Pandas ,.resample ('B' 的意外行为)

json - 来自 STDIN 的 Python JSON 输入问题

python-3.x - pandas 并行分组

python - 我的代码显示了不正确的mysql语法,尽管它是正确的

python - 如何处理 API 响应

python - 将 pandas 日期时间转换为从开始算起的小时数