在Python中填充具有滞后值的数据帧

时间:2018-03-01 12:03:35

标签: python pandas loops

我正在尝试编写一个循环,使用上一年的值填充数据框或矩阵中的元素。这些列代表了50年内不同的年份。行代表不同的离散年龄(最长50年)。给出了第1年的初始分布(绿色矢量)。我想先通过df或矩阵移动元素。因此,元素1,1描绘了第1年1岁的表面。结果,该元素移动到2,2; 3,3等等。最后一行应该移动到下一年的第一行(由蓝色箭头表示)。

enter image description here

我试图遍历数据框,但我认为 Keyerror 与[index-1]必须绑定的事实有关吗?

import numpy as np
import pandas as pd

years = np.arange(50)
a_vector = np.arange(50)
pop_matrix = pd.DataFrame(0, index=a_vector, columns=years)

#Initial vector (green)
A0 = 5000000
for a, rows in pop_matrix.iterrows():
    pop_matrix[0][a] = A0 / len(pop_matrix)

#Incorrect attempt
for t in years:
    for a, rows in pop_matrix.iterrows():
        if t-1 >= 0 and a-1 >= 0:
            pop_matrix[t][a] = pop_matrix[t-1][a-1]

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是使用numpy roll功能。

提取索引的值,然后每次使用不同的班次应用numpy roll。示例:

for year in years:
    col = pop_matrix.columns.tolist()[year]
    pop_matrix[col] = numpy.roll(a_vector, shift=year+1)