python - 大熊猫特定月份的平均值
问题描述
我无法使用熊猫创建平均值。我的问题是我想为每个冬天创建结合 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
解决方案
有趣的问题。由于您平均超过五个月,这使得重新采样更加棘手。您应该能够通过逻辑索引和构建新的数据框来克服这个问题。我假设您的索引是日期时间值。
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 循环中以迭代多年等。
推荐阅读
- odoo-8 - 如何计算odoo8中树视图中列的平均值?
- python - 如果用户输入字符串为空或数字或非 ascii-Python
- php - 在 CodeIgniter 自定义错误页面中显示页眉和页脚
- node.js - 无法在 Express 4 上将 NODE_ENV 设置为生产
- c++ - boost/asio:非常简单的聊天服务器无法访问收到的消息
- amazon-ec2 - 如何将 GCP 实例迁移到 AWS?
- python - Python/Docker:如何在 docker 中使用 python 日志记录模块?
- ruby-on-rails - 如何通过 minitest 测试 after_sign_in_path_for
- c# - vs 2017 asp.net core 2.2中缺少上下文菜单以添加控制器
- javascript - 使用 javascript 在两个新选项卡中打开两个 url,而不使用弹出窗口阻止程序