【问题标题】:Convert yearly timeseries to monthly将年度时间序列转换为月度
【发布时间】:2019-06-28 19:45:23
【问题描述】:

如果我的 df 索引有“01-01-2000”、“01-01-2001”、“01-01-2002”等,我如何将每年的时间序列转换为每月。带有“M”的重采样方法有效,但每月系列停止在去年的“01-01”,但我希望去年的“12-01”在该范围内。感谢任何帮助。

【问题讨论】:

  • 您需要通过df.loc['12-01-last_year'] = np.NaN再添加一个数据点。
  • 这只是一个猜测,因为问题不是很清楚,但您只能在两个现有数据点之间插入数据。您可以尝试外推(根据历史已知数据预测新值)。
  • 我不是在尝试插值,而是在给定年份的所有月份中使用每年给定的值。类似于这里问的东西。 stackoverflow.com/questions/45306105/…
  • 也许您应该尝试附上您的数据集和所需输出的示例。
  • 我想在最后一个打印语句中获取 Month start 而不是 month end df = pd.DataFrame({'date':pd.date_range('2001-01-01',periods=15 , freq='AS'), 'Value_1':np.random.randint(0,100,15)}) 打印 (df) df=df.set_index('date') df_out = df.resample('M').ffill () 打印(df_out)

标签: python-3.x pandas time-series


【解决方案1】:

您可以尝试添加最后的虚假观察(正如 Quang Hoang 建议的那样):

import pandas as pd
import numpy as np

df = pd.DataFrame({'date': pd.date_range('2001-01-01', periods = 5, freq = 'AS'), 'Value_1': np.random.randint(0, 100, 4).tolist() + [np.NaN]})
df = df.set_index('date')
print(df)

原始系列于 2004-01-01 结束。

df_out = df.resample('MS').ffill()
print(df_out)

新系列将于 2004-12-01 结束。

【讨论】:

  • 感谢 Quang 和 Lenka。这行得通。但我试图在不添加另一个假数据点的情况下查看任何其他方法
猜你喜欢
  • 2018-08-30
  • 2021-01-24
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
相关资源
最近更新 更多