【问题标题】:pandas calculating mean per month熊猫计算每月平均值
【发布时间】: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


【解决方案1】:
availability.resample('M').mean()

【讨论】:

  • 请添加一些解释。
【解决方案2】:

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

#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()

这很有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多