如何为一年中的每个结束日期及其相应的值创建时间序列?
How to create time series for every end date of the year with its corresponding value?
我有一个数据框,看起来像下面的方式,其中 'Date' 列已经有 datetime64 dtype:
Date Income_Company_A
0 1990-02-01 2185600.0
1 1990-02-02 3103200.0
........................................
5467 2011-10-10 29555500.0
5468 2011-10-11 54708100.0
如何获取 Income_Company_A 的值,其中日期必须是每年的结束日期,即从 1990 年到 2011 年的每一年都必须是 12 月 31 日?
另外,如果每年的结束日期的值为 Null/NaN,那么如何用数据框中该日期之前的值填充它?
具有 NaN 值的第一个输出应如下所示:
1990-12-31 1593200.0
1991-12-31 4802000.0
1992-12-31 3302000.0
1993-12-31 5765200.0
1994-12-31 NaN
然后将日期 1994-12-31 的 NaN 值替换为之前日期的值,例如 1994-12-29 7865200.0
,最终输出应如下所示:
1990-12-31 1593200.0
1991-12-31 4802000.0
1992-12-31 3302000.0
1993-12-31 5765200.0
1994-12-31 7865200.0
假设日期列已经是日期时间数据类型:
df.loc[(df['Date'].dt.month == 12) & (df['Date'].dt.day == 31)].ffill()
在那种情况下,试试这个:
df.loc[df.groupby(df['Date'].dt.year)['Date'].idxmax()].ffill()
使用resample
并取年份的最后一个有效值:
out = df.assign(Date=df['Date'].astype('datetime64')).resample('Y', on='Date').last()
如果您的 Date
列已经 datetime64
dtype,您可以省略 .assign(...)
。
我有一个数据框,看起来像下面的方式,其中 'Date' 列已经有 datetime64 dtype:
Date Income_Company_A
0 1990-02-01 2185600.0
1 1990-02-02 3103200.0
........................................
5467 2011-10-10 29555500.0
5468 2011-10-11 54708100.0
如何获取 Income_Company_A 的值,其中日期必须是每年的结束日期,即从 1990 年到 2011 年的每一年都必须是 12 月 31 日? 另外,如果每年的结束日期的值为 Null/NaN,那么如何用数据框中该日期之前的值填充它?
具有 NaN 值的第一个输出应如下所示:
1990-12-31 1593200.0
1991-12-31 4802000.0
1992-12-31 3302000.0
1993-12-31 5765200.0
1994-12-31 NaN
然后将日期 1994-12-31 的 NaN 值替换为之前日期的值,例如 1994-12-29 7865200.0
,最终输出应如下所示:
1990-12-31 1593200.0
1991-12-31 4802000.0
1992-12-31 3302000.0
1993-12-31 5765200.0
1994-12-31 7865200.0
假设日期列已经是日期时间数据类型:
df.loc[(df['Date'].dt.month == 12) & (df['Date'].dt.day == 31)].ffill()
在那种情况下,试试这个:
df.loc[df.groupby(df['Date'].dt.year)['Date'].idxmax()].ffill()
使用resample
并取年份的最后一个有效值:
out = df.assign(Date=df['Date'].astype('datetime64')).resample('Y', on='Date').last()
如果您的 Date
列已经 datetime64
dtype,您可以省略 .assign(...)
。