首页 > 解决方案 > 为数据框生成日期数据

问题描述

我有一个数据框,其中 date_1 共有 30 个条目(2019 年 1 月 9 日至 2019 年 9 月 30 日)。我想生成另一个数据框,这样:

  1. 每个 date_1,我们有 29 个条目,每个 date_1 对应于 date_2,因此 date_2 的范围是(date_1 - 30 到 date_1 - 1)。

例如,01/09/2019 实际上对应于 (02/08/2019 - 31/08/2019) 的 date_2 02/09/2019 将对应于 (03/08/2019 - 01/09/2019) 的 date_2 .

等等

最终的数据集列如下所示:

Date_1 Date_2

任何人都可以提供同样的帮助。

编辑

预期输出:

Date_1  Date_2
01/09/2019  02/08/2019
01/09/2019  03/08/2019
01/09/2019  04/08/2019
01/09/2019  05/08/2019
.
.
.
.
01/09/2019  29/08/2019
01/09/2019  30/08/2019
02/09/2019  03/08/2019
.
.
.
02/09/2019  31/08/2019

谢谢

标签: pythonpandasnumpydataframe

解决方案


这段代码是否给出了您期望的结果?

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date_1' : pd.period_range('2019/09/01', '2019/09/30', freq='D').repeat(30)})

df['Date_2'] = np.tile(np.arange(30, 0, -1), df.Date_1.unique().size)

df.Date_2 = pd.to_timedelta(df.Date_2, 'D')
df.Date_2 = df.Date_1 - df.Date_2

print(df)

第一个答案:

“这是一种方法(不完全是您要求的“Date_2”格式,但这是想法):

import pandas as pd
import numpy as np

df = pd.DataFrame({'Date_1' : pd.period_range('2019/09/01', '2019/09/30', freq='D')})

df['Date_2_1'] = df.Date_1 - np.timedelta64(30, 'D') # First date for Date_2
df['Date_2_2'] = df.Date_1 - np.timedelta64(1, 'D') # Second date for Date_2

print(df)

"


推荐阅读