如何在日期不匹配时加入 pandas 中的时间序列?
How to do a timeseries join in pandas when dates don't match?
我在 pandas 中有两个 timeseries/dataframes,我需要从一个中获取索引,并从另一个中提取匹配值,使用最后一个值结转。
示例:
从帧 A 和 B 开始,我想制作 C,它与 B 具有相同的日期,但有一个额外的列显示该日期之前 A 的最后观测值。
>>> A
Date Y
0 2010-01-01 6
1 2010-09-15 9
2 2011-05-01 12
>>> B
Date X
0 2009-02-01 1
1 2010-02-01 2
2 2010-03-01 3
3 2010-12-21 4
4 2011-08-01 5
>>> C
Date X Y
0 2009-02-01 1 NaN
1 2010-02-01 2 6
2 2010-03-01 3 6
3 2010-12-21 4 9
4 2011-08-01 5 12
您可以使用.asof
功能。请注意,.asof
仅适用于 pd.Series
以 pd.DatetimeIndex
作为索引的对象。
# must use Date as index
df_A = df_A.set_index('Date')
df_B = df_B.set_index('Date')
# asof
df_B['Y'] = df_A['Y'].asof(df_B.index)
X Y
Date
2009-02-01 1 NaN
2010-02-01 2 6
2010-03-01 3 6
2010-12-21 4 9
2011-08-01 5 12
我在 pandas 中有两个 timeseries/dataframes,我需要从一个中获取索引,并从另一个中提取匹配值,使用最后一个值结转。
示例:
从帧 A 和 B 开始,我想制作 C,它与 B 具有相同的日期,但有一个额外的列显示该日期之前 A 的最后观测值。
>>> A
Date Y
0 2010-01-01 6
1 2010-09-15 9
2 2011-05-01 12
>>> B
Date X
0 2009-02-01 1
1 2010-02-01 2
2 2010-03-01 3
3 2010-12-21 4
4 2011-08-01 5
>>> C
Date X Y
0 2009-02-01 1 NaN
1 2010-02-01 2 6
2 2010-03-01 3 6
3 2010-12-21 4 9
4 2011-08-01 5 12
您可以使用.asof
功能。请注意,.asof
仅适用于 pd.Series
以 pd.DatetimeIndex
作为索引的对象。
# must use Date as index
df_A = df_A.set_index('Date')
df_B = df_B.set_index('Date')
# asof
df_B['Y'] = df_A['Y'].asof(df_B.index)
X Y
Date
2009-02-01 1 NaN
2010-02-01 2 6
2010-03-01 3 6
2010-12-21 4 9
2011-08-01 5 12