填写缺失的日期值并根据前一行填充第二列

Posted

技术标签:

【中文标题】填写缺失的日期值并根据前一行填充第二列【英文标题】:Fill in missing date values and populate second column based on previous row 【发布时间】:2020-02-28 16:39:16 【问题描述】:

我有一个包含 2 列的 csv,其中一个包含日期,第二列包含速率值。该文件包含基于日期列的一些缺失行。

我想要一些可以填补第一行和最后一行之间缺失的日期(01/01/2019 和 14/01/2019 之间)的 python 代码,第二个任务是然后填写缺失的日期率与前几天的率。

例如,缺少 1 月 4 日和 05 日,需要创建这些行,并且前一天的汇率是 1 月 3 日 - 1.12,因此需要填写 1 月 4 日和 05 日的汇率。

代码需要是动态的,因此每个文件的第一行和最后一行并不总是相同的。例如,第二个文件的第一行和最后一行值可以是 03/02/2019 和 25/02/2019。如果可能,相同的代码需要能够在每个文件上运行。

输入为 csv,输出也需要为 csv 文件。

输入 -

Date,Rate
01/01/2019,1.12
02/01/2019,1.13
03/01/2019,1.12
06/01/2019,1.11
07/01/2019,1.13
08/01/2019,1.14
09/01/2019,1.13
10/01/2019,1.11
12/01/2019,1.12
13/01/2019,1.13
14/01/2019,1.14

如果您有任何问题,请告诉我。

【问题讨论】:

【参考方案1】:

首先你需要确保你的日期是datetime类型,你可以使用resample

# resample
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

new_df = df.set_index('Date').resample('D').ffill().reset_index()

输出:

         Date  Rate
0  2019-01-01  1.12
1  2019-01-02  1.13
2  2019-01-03  1.12
3  2019-01-04  1.12
4  2019-01-05  1.12
5  2019-01-06  1.11
6  2019-01-07  1.13
7  2019-01-08  1.14
8  2019-01-09  1.13
9  2019-01-10  1.11
10 2019-01-11  1.11
11 2019-01-12  1.12
12 2019-01-13  1.13
13 2019-01-14  1.14

【讨论】:

似乎不起作用? df['Date'] = pd.to_datetime(df['Date'],format='%d/%m/%Y') df.set_index('Date').resample('D').ffill() .reset_index() df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) print(df) 输出刚刚返回输入? 对不起,我在复制/粘贴时弄乱了顺序。查看更新。

以上是关于填写缺失的日期值并根据前一行填充第二列的主要内容,如果未能解决你的问题,请参考以下文章

根据 max 和 min 填写缺失的日期 pandas

根据 max 和 min 填写缺失的日期 pandas

用缺失日期的数据填充表格(postgresql、redshift)

在 PySpark 中重新索引和填充缺失的日期

Vba 代码在单元格范围内复制特定值

oracle查询填补同一张表中缺失的数据