python - 绘制按特定日期范围分组的每列平均值
问题描述
我有 7 列数据,按日期时间(30 分钟频率)索引,从 2017 年 5 月 31 日开始,到 2018 年 5 月 25 日结束。我想绘制特定日期范围(季节)的平均值。我一直在尝试 groupby,但我无法按特定范围分组。如果我这样做,我会得到错误的结果df.groupby(df.date.dt.month).mean()
。
数据集中的几行(日期范围从 2017-05-31 到 2018-05-25)
50 51 56 58
date
2017-05-31 00:00:00 200.213542 276.929198 242.879051 NaN
2017-05-31 00:30:00 200.215478 276.928229 242.879051 NaN
2017-05-31 01:00:00 200.215478 276.925324 242.878083 NaN
2017-06-01 01:00:00 200.221288 276.944691 242.827729 NaN
2017-06-01 01:30:00 200.221288 276.944691 242.827729 NaN
2017-08-31 09:00:00 206.961886 283.374453 245.041349 184.358250
2017-08-31 09:30:00 206.966727 283.377358 245.042317 184.360187
2017-12-31 09:00:00 212.925877 287.198416 247.455413 187.175144
2017-12-31 09:30:00 212.926846 287.196480 247.465097 187.179987
2018-03-31 23:00:00 213.304498 286.933093 246.469647 186.887548
2018-03-31 23:30:00 213.308369 286.938902 246.468678 186.891422
2018-04-30 23:00:00 215.496812 288.342024 247.522230 188.104749
2018-04-30 23:30:00 215.497781 288.340086 247.520294 188.103780
我已经创建了这些变量(这些是我需要的范围)
increment_rates_winter = df['2017-08-30'].mean() - df['2017-06-01'].mean()
increment_rates_spring = df['2017-11-30'].mean() - df['2017-09-01'].mean()
increment_rates_summer = df['2018-02-28'].mean() - df['2017-12-01'].mean()
increment_rates_fall = df['2018-05-24'].mean() - df['2018-03-01'].mean()
连接它们:
df_seasons =pd.concat([increment_rates_winter,increment_rates_spring,increment_rates_summer,increment_rates_fall],axis=1)
在绘制之后,我得到了这个:
但是,我一直在努力做到这一点:
df_seasons
Out[664]:
Winter Spring Summer Fall
50 6.697123 6.948447 -1.961549 7.662622
51 6.428329 4.760650 -2.188402 5.927087
52 5.580953 6.667529 1.136889 12.939295
53 6.406259 2.506279 -2.105125 6.964549
54 4.332826 3.678492 -2.574769 6.569398
56 2.222032 3.359607 -2.694863 5.348258
58 NaN 1.388535 -0.035889 4.213046
x 中的季节和为每列绘制的平均值。
Winter = df['2017-06-01':'2017-08-30']
Spring = df['2017-09-01':'2017-11-30']
Summer = df['2017-12-01':'2018-02-28']
Fall = df['2018-03-01':'2018-05-30']
先感谢您!
解决方案
我们可以通过以下方式获得特定的日期范围,然后您可以根据需要定义它并取平均值
import pandas as pd
df = pd.read_csv('test.csv')
df['date'] = pd.to_datetime(df['date'])
start_date = "2017-12-31 09:00:00"
end_date = "2018-04-30 23:00:00"
mask = (df['date'] > start_date) & (df['date'] <= end_date)
f_df = df.loc[mask]
这给出了输出
date 50 ... 58
8 2017-12-31 09:30:00 212.926846 ... 187.179987 NaN
9 2018-03-31 23:00:00 213.304498 ... 186.887548 NaN
10 2018-03-31 23:30:00 213.308369 ... 186.891422 NaN
11 2018-04-30 23:00:00 215.496812 ... 188.104749 NaN
希望这可以帮助
推荐阅读
- prettier - npx mrm lint-staged 错误,“未找到预设“默认”。”
- kubernetes - 主机目录未显示来自 Kubernetes 持久卷声明的文件
- ansible - 如果需要修改或已修改任何内容,则使用更改检测更改 WebSphere 中的 MailSession for HCL Connections
- c++ - 是否可以使用旧 c++ 版本的 c++ 库?
- java - 如果我不在 Java 中使用 Base64 编码,为什么 AES 不起作用?
- ios - 有没有办法在 swift Xcode 中添加一个镜头?
- java - 作为“swtbot test”运行时出现 SWTBot 错误
- phpmyadmin - phpmyadmin 登录错误 1045,需要帮助修复
- javascript - JS/Jest:如何测试条件布尔值?
- python - Python方法移动写入文件