根据现有值的插值将时间条目添加到 Pandas 个数据系列
Add time entries to Pandas data series based on interpolation of existing values
我有一个年度 pandas 数据系列,如下所示:
Year Price
1940-12-31 33.85
1941-12-31 33.85
1942-12-31 33.85
1943-12-31 33.85
1944-12-31 33.85
1945-12-31 34.71
1946-12-31 34.71
1947-12-31 34.71
1948-12-31 34.71
1949-12-31 31.69
1950-12-31 34.72
我是 pandas 数据系列的新手,但我相信日期是一个索引,因为当我打印 table 时它指出只有 1 列。
我想将其更改为每月,然后根据从一个点到下一个点的线性进展为缺失的月份填充插值数据。因此,例如,这是 1949 年的样本,其中包括缺失的月份和插值:
Date Price
1948-12-31 34.71
1949-01-31 34.46
1949-02-28 34.21
1949-03-31 33.96
1949-04-30 33.70
1949-05-31 33.45
1949-06-30 33.20
1949-07-31 32.95
1949-08-31 32.70
1949-09-30 32.45
1949-10-31 32.19
1949-11-30 31.94
1949-12-31 31.69
这些 1949 年内插值的公式是([1949 年底的价格]-[1948 年底的价格])/12 + 上个月的价格
我是 Pandas 和 python 的新手,所以如果这个问题在其他地方被问到,请原谅我。
以下代码将完成这项工作:
df['Price'].resample('M').interpolate()
将 df 替换为您的 DataFrame 的名称。
resample('M') 将系列的频率更改为每月一次。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html)
interpolate() 默认使用线性插值,这正是您想要的,但它还有许多其他可用选项。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html)
假设您有一个使用 DatetimeIndex 正确索引的 DataFrame,这将起作用(如果我很好地理解您的描述,情况应该如此)。您可以通过
检查是否确实如此
df.index
如果索引设置正确,您将看到类似这样的输出:
DatetimeIndex(['1940-12-31', '1941-12-31', '1942-12-31', '1943-12-31',
'1944-12-31', '1945-12-31', '1946-12-31', '1947-12-31',
'1948-12-31', '1949-12-31', '1950-12-31'],
dtype='datetime64[ns]', freq='A-DEC', tz=None)
我有一个年度 pandas 数据系列,如下所示:
Year Price
1940-12-31 33.85
1941-12-31 33.85
1942-12-31 33.85
1943-12-31 33.85
1944-12-31 33.85
1945-12-31 34.71
1946-12-31 34.71
1947-12-31 34.71
1948-12-31 34.71
1949-12-31 31.69
1950-12-31 34.72
我是 pandas 数据系列的新手,但我相信日期是一个索引,因为当我打印 table 时它指出只有 1 列。
我想将其更改为每月,然后根据从一个点到下一个点的线性进展为缺失的月份填充插值数据。因此,例如,这是 1949 年的样本,其中包括缺失的月份和插值:
Date Price
1948-12-31 34.71
1949-01-31 34.46
1949-02-28 34.21
1949-03-31 33.96
1949-04-30 33.70
1949-05-31 33.45
1949-06-30 33.20
1949-07-31 32.95
1949-08-31 32.70
1949-09-30 32.45
1949-10-31 32.19
1949-11-30 31.94
1949-12-31 31.69
这些 1949 年内插值的公式是([1949 年底的价格]-[1948 年底的价格])/12 + 上个月的价格
我是 Pandas 和 python 的新手,所以如果这个问题在其他地方被问到,请原谅我。
以下代码将完成这项工作:
df['Price'].resample('M').interpolate()
将 df 替换为您的 DataFrame 的名称。 resample('M') 将系列的频率更改为每月一次。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html)
interpolate() 默认使用线性插值,这正是您想要的,但它还有许多其他可用选项。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html)
假设您有一个使用 DatetimeIndex 正确索引的 DataFrame,这将起作用(如果我很好地理解您的描述,情况应该如此)。您可以通过
检查是否确实如此df.index
如果索引设置正确,您将看到类似这样的输出:
DatetimeIndex(['1940-12-31', '1941-12-31', '1942-12-31', '1943-12-31',
'1944-12-31', '1945-12-31', '1946-12-31', '1947-12-31',
'1948-12-31', '1949-12-31', '1950-12-31'],
dtype='datetime64[ns]', freq='A-DEC', tz=None)