Python 大熊猫特定月份的平均值

Python 大熊猫特定月份的平均值,python,pandas,datetime,Python,Pandas,Datetime,我在使用熊猫创建平均值时遇到困难。我的问题是,我想为每个冬天创建11月、12月、1月、2月、3月的平均值,但是它们属于不同的年份,因此我不能只对一个日历年内的值进行平均。我已经尝试将数据分为两个datetime对象,如下所示 nd_npi_obs = ndjfm_npi_obs[ndjfm_npi_obs.index.month.isin([11,12])] jfm_npi_obs = ndjfm_npi_obs[ndjfm_npi_obs.index.month.isin([1,2,3])]

我在使用熊猫创建平均值时遇到困难。我的问题是,我想为每个冬天创建11月、12月、1月、2月、3月的平均值,但是它们属于不同的年份,因此我不能只对一个日历年内的值进行平均。我已经尝试将数据分为两个datetime对象,如下所示

nd_npi_obs = ndjfm_npi_obs[ndjfm_npi_obs.index.month.isin([11,12])]
jfm_npi_obs = ndjfm_npi_obs[ndjfm_npi_obs.index.month.isin([1,2,3])]
…然而,为了做一个简单的平均值,我很难操纵日期(年)。我对熊猫缺乏经验,不知道是否有比输出到excel和改变年份更优雅的方式!数据的格式为

Date    
1899-01-01 00:00:00 100994.0
1899-02-01 00:00:00 100932.0
1899-03-01 00:00:00 100978.0
1899-11-01 00:00:00 100274.0
1899-12-01 00:00:00 100737.0
1900-01-01  100655.0
1900-02-01  100633.0 
1900-03-01  100512.0
1900-11-01  101212.0
1900-12-01  100430.0

有趣的问题。由于平均时间超过五个月,这使得重新采样更加棘手。您应该能够通过逻辑索引和构建新的数据帧来克服这一问题。我假设您的索引是一个日期时间值

index = pd.date_range('1899 9 1', '1902, 3, 1', freq='1M')
data = np.random.randint(0, 100, (index.size, 5))
df = pd.DataFrame(index=index, data=data, columns=list('ABCDE'))

# find rows that meet your criteria and average
idx1 = (df.index.year==1899) & (df.index.month >10)
idx2 = (df.index.year==1900) & (df.index.month < 4)

winterAve = df.loc[idx1 | idx2, :].mean(axis=0)

您应该能够将其放入for循环中,以在多年内进行迭代,等等。

使用pd.Grouper按月对数据进行分组

g = df.groupby(pd.Grouper(freq="M"))  # DataFrameGroupBy (grouped by Month)
对于每组,只计算“A”列的平均值

monthly_averages = g.aggregate({"A":np.mean})

OP希望在多个月内平均数据,而不仅仅是一个月内的数据。这几乎奏效!但是,由于输出中的日期是该月的最后几天,因此它将返回NaN作为值,因为我的所有值都是在月初设置的。我不知道这是在哪里设置的…你知道调整这个的方法吗?哈哈!通过设置freq='1MS'而不是'1M'来解决此问题。干杯,好球。很高兴它成功了。如果你对这个答案感到满意的话,你可以自由地把它作为一个公认的答案。
monthly_averages = g.aggregate({"A":np.mean})