首页 > 解决方案 > 使用 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

标签: pythonpandasweighted-average

解决方案


从软件设计的角度来看,您似乎需要在尝试与数据交互之前进行一些数据清理。

数据科学周期

你需要定义你想要做什么。你想去掉所有的nan值,还是把它们当作 0?如果一个事件在一个月内开始但在另一个月结束怎么办?一旦你有了这些问题,你就可以开始思考要编码什么了。下面是我将采取的方法(但我不知道你想对数据做什么):

  1. 处理NaNs
  2. 确定每个数据点所在的月份,并添加一个包含该信息的列(这里是如何从 python datatimes 获取月份的示例)。
  3. 使用开始和结束日期列创建新的“持续时间”列
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
  1. 按月汇总数据。将一个月内的所有持续时间加起来。将一个月内的所有浓度数据加起来。avg = tot_conc / tot_duration. 然后将此值添加到新表中:
 | month | avg_conc |
 |  Feb. |  2.218.  |

推荐阅读