Pandas计算每月平均值

4
我创建了以下数据框:
availability = pd.DataFrame(propertyAvailableData).set_index("createdat")

monthly_availability = availability.fillna(value=0).groupby(pd.TimeGrouper(freq='M'))

这将产生以下输出。
            2015-08-18  2015-09-09  2015-09-10  2015-09-11  2015-09-12  \
createdat                                                                
2015-08-12         1.0         1.0         1.0         1.0         1.0   
2015-08-17         0.0         0.0         0.0         0.0         0.0   
2015-08-18         0.0         1.0         1.0         1.0         1.0   
2015-08-18         0.0         0.0         0.0         0.0         0.0   
2015-08-19         0.0         1.0         1.0         1.0         1.0   
2015-09-03         0.0         1.0         1.0         1.0         1.0   
2015-09-03         0.0         1.0         1.0         1.0         1.0   
2015-09-07         0.0         0.0         0.0         0.0         0.0   
2015-09-08         0.0         0.0         0.0         0.0         0.0   
2015-09-11         0.0         0.0         0.0         0.0         0.0   

我正在尝试通过以下方法按创建日期月份获取平均值:

monthly_availability_mean = monthly_availability.mean()

然而,这里我得到以下输出:
            2015-08-18  2015-09-09  2015-09-10  2015-09-11  2015-09-12  \
createdat                                                                
2015-08-31    0.111111    0.444444    0.666667    0.777778    0.777778   
2015-09-30    0.000000    0.222222    0.222222    0.222222    0.222222   
2015-10-31    0.000000    0.000000    0.000000    0.000000    0.000000   

当我手动检查八月份时,我得到了:
1.0 + 0 + 0 + 0 + 0 / 5 = 0.2

如何获得每月的正确平均值?

1
嗯,对我来说它运行得很好。也许索引没有排序,还有其他的行 - 尝试 df = df.sort_index() - jezrael
谢谢!我尝试了以下代码:`availability = pd.DataFrame(propertyAvailableData).set_index("createdat")` `availability = availability.sort_index()` `monthly_availability = availability.fillna(value=0).groupby(pd.TimeGrouper(freq='M'))`但结果仍然相同。 - Bunker
1
我认为你需要使用sort_index来更好地检查数据,因为似乎还有其他带有八月索引的行。或者问题也可能出在你的简短示例上? - jezrael
1
嗯,表头只显示前 5 行,因此默认情况下没有排序。 - jezrael
1
当然,没问题。祝您有愉快的一天! - jezrael
显示剩余2条评论
2个回答

4
availability.resample('M').mean()

5
请添加一些解释。 - Rahul

0

我刚遇到了同样的问题,并用以下代码解决了它

#load data daily
df = pd.read_csv('./name.csv')
#set Date as index
df.Date = pd.to_datetime(df.Date)
df_date = df.set_index('Date', inplace=False)
#get monthly mean
df_month = df_date.resample('M').mean()
#group months
df_monthly_mean = df_month.groupby(df_daily.index.month).mean()

这个有帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接