【发布时间】:2017-02-22 10:32:03
【问题描述】:
我创建了以下数据框:
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
当我在 8 月亲自检查时,我得到:
1.0 + 0 + 0 + 0 + 0 / 5 = 0.2
如何获得正确的每月平均值?
【问题讨论】:
-
嗯,对我来说效果很好。也许索引未排序并且还有其他行 - 尝试
df = df.sort_index() -
谢谢!我试过了:
availability = pd.DataFrame(propertyAvailableData).set_index("createdat")availability = availability.sort_index()monthly_availability = availability.fillna(value=0).groupby(pd.TimeGrouper(freq='M'))但仍然得到相同的结果 -
我认为您需要
sort_index才能更好地检查数据,因为似乎还有其他行带有 8 月索引。还是您的短样本也有问题? -
嗯,head 只显示前
5行,所以默认没有排序。 -
当然,没问题。美好的一天!
标签: python pandas data-analysis