python - 使用 python 将不规则数据聚合为月平均数天数
问题描述
考虑到数据可以代表两个月(和几年),并且有空白期,我正在努力将我的数据平均为每月平均值。因此,需要对样品进行相应称重,即一个月中有 2 天和下个月有 5 天的样品应分别具有 2/7 和 5/7 的重量。我曾尝试先重新索引每日数据,然后重新采样,但存在空周期(不想填充这些)和不规则采样周期的问题。Surly 我可以计算每个时期的持续时间(结束开始),但不确定这是否有帮助,因为还需要知道月份之间的间隔。
以下是部分数据:
start end conc
26.12.2019 07:00 03.01.2020 07:00 0.235
03.01.2020 07:00 14.01.2020 07:00 nan
14.01.2020 07:00 20.01.2020 07:00 0.032
21.01.2020 07:00 29.01.2020 07:00 1.601
29.01.2020 07:00 06.02.2020 07:00 0.815
06.02.2020 07:00 10.02.2020 07:00 nan
10.02.2020 07:00 20.02.2020 07:00 3.029
20.02.2020 07:00 28.02.2020 07:00 2.158
28.02.2020 07:00 09.03.2020 07:00 0.784
09.03.2020 07:00 18.03.2020 07:00 0.304
结果应该是:
jan.2020 0.829
feb.2020 2.128
解决方案
从软件设计的角度来看,您似乎需要在尝试与数据交互之前进行一些数据清理。
你需要定义你想要做什么。你想去掉所有的nan
值,还是把它们当作 0?如果一个事件在一个月内开始但在另一个月结束怎么办?一旦你有了这些问题,你就可以开始思考要编码什么了。下面是我将采取的方法(但我不知道你想对数据做什么):
- 处理
NaN
s - 确定每个数据点所在的月份,并添加一个包含该信息的列(这里是如何从 python datatimes 获取月份的示例)。
- 使用开始和结束日期列创建新的“持续时间”列
start end Duration month conc
26.12.2019 07:00 03.01.2020 07:00 x sec Dec 0.235
03.01.2020 07:00 14.01.2020 07:00 y sec Jan nan
14.01.2020 07:00 20.01.2020 07:00 z sec Jan 0.032
- 按月汇总数据。将一个月内的所有持续时间加起来。将一个月内的所有浓度数据加起来。
avg = tot_conc / tot_duration
. 然后将此值添加到新表中:
| month | avg_conc |
| Feb. | 2.218. |
推荐阅读
- ruby-on-rails - Ruby before_validation 触发无限循环的回调
- docker - 由于 xpack 安全错误,Kibana docker 镜像无法启动
- shell - 我怎样才能最便携地通过 HTTP 从 shell 脚本下载?我可以依靠 curl 或 wget 吗?
- python - python pandas计算列中列表内出现的次数
- java - Selenium chromedriver 丢失窗口句柄。org.openqa.selenium.NoSuchWindowException:没有这样的窗口错误
- html - 带有显示滚动条的 svg 源的 Mac OS Safari 12 图像
- c# - 只有数字的文本框
- php - PHP致命错误:require():需要打开失败
- java - 如何在 Maven 项目中包含已编译的二进制文件?
- cloud-foundry - 如何在 CloudFoundry 上运行 Selenium-Grid?