python - 根据两个条件获得平均值
问题描述
我有世界各地城市 2010 年至 2019 年平均每周气温的数据框。所以我的数据框看起来像这样:
date city avg_temp week
2010-01-01 madrid 25 1
2010-01-08 madrid 26 2
2010-01-16 madrid 22 3
...
我想创建一个新的数据框,按城市将所有年份平均为几周。它可能看起来像这样:
week city avg_temp_2010to2019
1 madrid 25
2 madrid 26
3 madrid 22
...
我有 2020 年的平均每周温度数据,我的想法是将 2010-2019 年集合与 2020 年验证集合进行对比/预测。最终结果可能如下所示
week city avg_temp_2010to2019 avg_temp_2020
1 madrid 25 24
2 madrid 26 26
3 madrid 22 21
...
我知道这可以使用 .groupby() 来完成,但这会产生另一个问题。如果我这样做:
data.groupby(['city', 'week']).avg_temp_2010to2019.mean()
...我得到一个看起来像这样的 pd.Series:
city week avg_temp_2010to2019
madrid 1 25
2 26
3 22
...
该 pd.Series 的问题是我无法添加另一列 - 2020 年数据。换句话说,这不起作用:
df_with_groupby['2020'] = df_other['2020']
我一直在努力寻找可行的方法,但似乎找不到解决方案。任何帮助将非常感激。
非常感谢
解决方案
当我理解正确时,您不需要确切的日期列。所以也许你在那之后就放弃了。
sampleDF.drop(['date'], axis=1, inplace=True)
首先 reset_index 用不完整的行解决你的问题,然后我会合并这两个数据框:
sampleDf = pd.DataFrame({'city': ['M', 'M', 'M','C'],
'avg_temp': [21, 32, 14,23],
'week': [1, 2, 3, 1]})
otherDF = pd.DataFrame({'city': ['M', 'M', 'C','M'],
'avg_temp_2020': [4, 25, 36,1],
'week': [1, 2, 1, 3]})
sampleDf = sampleDf.groupby(['city', 'avg_temp']).mean().reset_index()
sampleDf = sampleDf.merge(otherDF, left_on=['city', 'week'], right_on=['city', 'week'])
print(sampleDf)
也许为了更好地理解检查合并方法的文档。
推荐阅读
- android - java.lang.NoSuchMethodError:没有静态方法'myMethod'
- java - 手动配置构建路径时导入未解决
- python - 如何在 python 中打印 matrix[i][j]?
- pandas - 为什么有些 pandas 聚合函数在引号中,而另一些则不是?
- asp.net - IsPostback 始终为 false,未使用表单提交或 AutoPostBack="true" 触发事件
- c# - EF 核心。如何从深层嵌套实体中仅加载必要的属性
- wpf - 如何访问由“编码器”设置的属性在 xaml 字典中说一个覆盖(命名)按钮模板
- angular - 重新加载页面时的 ngOnDestroy
- cmake - CMake:从源代码之外的子目录中的对象库中的源构建对象文件
- ruby - 在 puma 工作人员处发生 Sequel::DatabaseDisconnectError,即使 db 在 puma 的 before_fork-hook 中已断开连接