让我们假设有一个读数如下的数据帧:

   id  meter  reading       date
0   2      2     8232 2023-09-01
1   5      2     8267 2023-11-01
2   8      2     8472 2023-12-01
3  11      2     9354 2024-02-17
4  14      2     9417 2024-03-04

过go 一年的消耗是这样的:将数据帧减少到最后一年.计算最后一个值和第一个值之间的差值(等于240).本年度的计算结果大致相同(等于63).

问题:实际消费量是1185,远远超过240+63.

挑战在于,从上一年的最后一次读数到本年度的第一次读数之间的时间框架太长了.更好的方法是计算今年年初的假设值,步骤如下:

  • 确定时间范围,包括一年的周转时间
  • 计算时间范围(31+31+17=79)
  • 计算此时间范围内的消耗(882)
  • 计算这段时间内的日消耗量(882/79=11)
  • 使用值(30*11+8472=8802)为2023-12-31添加一个条目
  • 使用值(9354-47*11=8826)为2024-01-01添加一个条目

并计算出今年(591)和go 年(570)的消费,总和(1161)更接近实际数字(1185).

有人知道如何使用Pandas 数据帧来实现这一点吗?

推荐答案

Code

首先完成日期时间并查找Y(&A;Y)

df['date'] = pd.to_datetime(df['date'])
date1 = pd.date_range(df['date'].min(), df['date'].max(), freq='Y').tolist()
date2 = pd.date_range(df['date'].min(), df['date'].max(), freq='YS').tolist()

由插值法插补

out = (df.set_index('date')
       .reindex(df['date'].tolist() + date1 + date2)
       .sort_index()
       .assign(reading=lambda x: x['reading'].由插值法插补(method='time'))
       .reset_index()[df.columns]
)

输出:

    id  meter       reading date
0   2.00    2.00    8232.00 2023-09-01
1   5.00    2.00    8267.00 2023-11-01
2   8.00    2.00    8472.00 2023-12-01
3   NaN     NaN     8811.23 2023-12-31
4   NaN     NaN     8822.54 2024-01-01
5   11.00   2.00    9354.00 2024-02-17
6   14.00   2.00    9417.00 2024-03-04

Python相关问答推荐

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

滚动和,句号来自Pandas列

从收件箱中的列中删除html格式

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

如何创建一个缓冲区周围的一行与manim?

如何设置视频语言时上传到YouTube与Python API客户端

给定高度约束的旋转角解析求解

字符串合并语法在哪里记录

matplotlib + python foor loop

python panda ExcelWriter切换动态公式到数组公式

Python pint将1/华氏度转换为1/摄氏度°°

我对这个简单的异步者的例子有什么错误的理解吗?

在电影中向西北方向对齐""

在第一次调用时使用不同行为的re. sub的最佳方式

为什么在Python中00是一个有效的整数?

对数据帧进行分组,并按组间等概率抽样n行

有没有一种方法可以在朗肯代理中集成向量嵌入

使用pythonminidom过滤XML文件