首页 > 解决方案 > 根据两个条件获得平均值

问题描述

我有世界各地城市 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']

我一直在努力寻找可行的方法,但似乎找不到解决方案。任何帮助将非常感激。

非常感谢

标签: pythonpandastime-series

解决方案


当我理解正确时,您不需要确切的日期列。所以也许你在那之后就放弃了。

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)

也许为了更好地理解检查合并方法的文档。


推荐阅读