如何按日期合并 DF,仅使用日期和月份,使用指定的日期范围
How to merge DFs by date, using only day and month, using specified date range
我有一个具有日期范围的 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
我想创建一个新的 df,方法是将 df1 中的信息合并到 df0 中的日期范围,只使用 df1 中的日期和月份。如果年份不匹配也没关系。 IE: 12/30/2018 会在 df1.
中获取 12/30/2017 的数据
df0 中的日期范围是我要保留的关键日期范围。
一个日历年中的每一天,每个地点只有一个临时值。如果 df0 跨越多年,则相同的值可能会出现多次。 IE:如果 df0 是一个十年长的时间序列,我会看到 YYC = 5.07 十次,在时间序列的每个 12/30 上。
在上面的 df0 和 df1 示例中,新数据框 (df2) 将有两个条目表示 12/30/2018:
date loc temp
12/30/2018 YYC 5.07
12/30/2018 YYZ 4.08
我不相信我可以合并这些,因为它是最新的。我不相信我可以做 .isin df0,因为我只需要匹配一部分(日和月)
为每个数据框创建一个月份和日期列,然后将 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
我有一个具有日期范围的 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
我想创建一个新的 df,方法是将 df1 中的信息合并到 df0 中的日期范围,只使用 df1 中的日期和月份。如果年份不匹配也没关系。 IE: 12/30/2018 会在 df1.
中获取 12/30/2017 的数据df0 中的日期范围是我要保留的关键日期范围。
一个日历年中的每一天,每个地点只有一个临时值。如果 df0 跨越多年,则相同的值可能会出现多次。 IE:如果 df0 是一个十年长的时间序列,我会看到 YYC = 5.07 十次,在时间序列的每个 12/30 上。
在上面的 df0 和 df1 示例中,新数据框 (df2) 将有两个条目表示 12/30/2018:
date loc temp
12/30/2018 YYC 5.07
12/30/2018 YYZ 4.08
我不相信我可以合并这些,因为它是最新的。我不相信我可以做 .isin df0,因为我只需要匹配一部分(日和月)
为每个数据框创建一个月份和日期列,然后将 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