如何使用指定的日期范围仅使用日期和月份按日期合并DF

时间:2018-03-20 03:21:32

标签: pandas merge time-series helpers

我有一个DF(df0),其中包含一系列日期:

date
12/30/2018
12/31/2018
1/1/2019
1/2/2019
1/3/2019

带有数据的DF(df1):

date        loc temp
12/30/2017  YYC 5.07
12/31/2017  YYC 5.64
1/1/2017    YYC 3.43
1/2/2017    YYC 7.89
1/3/2017    YYC 2.49
12/30/2017  YYZ 4.08
12/31/2017  YYZ 7.40
1/1/2017    YYZ 7.82
1/2/2017    YYZ 8.33
1/3/2017    YYZ 7.74

我想通过将df1中的信息合并到df0中的日期范围来创建新的df,使用df1中的仅日期和月份。如果岁月不匹配就没关系了。 IE:12/30/2018将从12月30日开始在df1中获取数据。

df0中的日期范围是我想保留的关键日期范围。

一个日历年中每天只有一个临时值。如果df0跨越多年,那么相同的值可能出现多次。 IE:如果df0是一个十年的时间序列,我会在每个12/30的时间序列中看到YYC = 5.07十次。

在上面的df0和df1示例中,新数据框(df2)将有12/30/2018的两个条目:

date        loc temp
12/30/2018  YYC 5.07
12/30/2018  YYZ 4.08

我不相信我能把它们当作它的日期。我不相信我能做到。在df0,因为我只需要匹配一部分(日和月)

1 个答案:

答案 0 :(得分:0)

为每个数据框创建一个月和日列,然后将df1与df0合并:

import pandas as pd

df0['Date'] = pd.to_datetime(df0['Date'])
df1['date'] = pd.to_datetime(df1['date'])
df0['day'] = df0.Date.dt.day
df0['month'] = df0.Date.dt.month
df1['day'] = df1.date.dt.day
df1['month'] = df1.date.dt.month

df0.merge(df1, how='inner', on=['month', 'day']).drop(columns=['month', 'day', 'date'])

    Date    loc temp
0   2018-12-30  YYC 5.07
1   2018-12-30  YYZ 4.08
2   2018-12-31  YYC 5.64
3   2018-12-31  YYZ 7.4
4   2019-01-01  YYC 3.43
5   2019-01-01  YYZ 7.82
6   2019-01-02  YYC 7.89
7   2019-01-02  YYZ 8.33
8   2019-01-03  YYC 2.49
9   2019-01-03  YYZ 7.74