首页 > 解决方案 > 大熊猫特定月份的平均值

问题描述

我无法使用熊猫创建平均值。我的问题是我想为每个冬天创建结合 11 月、12 月、1 月、2 月、3 月的平均值,但是它们属于不同的年份,因此我不能只对一个日历内的这些值进行平均年。我尝试将数据子集到两个日期时间对象中作为..

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])]

..但是我在操纵日期(年)以进行简单的平均时遇到了麻烦。我对 pandas 没有经验,想知道是否有比导出到 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

标签: pythonpandasdatetime

解决方案


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

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)

只是为了直观地检查索引/切片是否在做我们需要的事情......

>>>df.loc[idx1 | idx2, :]
Out[200]: 
             A   B   C   D   E
1899-11-30  48  91  87  29  47
1899-12-31  63   5   0  35  22
1900-01-31  37   8  89  86  38
1900-02-28   7  35  56  63  46
1900-03-31  72  34  96  94  35

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


推荐阅读