我有一个熊猫数据框。我想“延迟”#39;我的一个专栏有条件地在其他专栏上。通常在下面,我想基于y之前的"真实"延迟gdp。值。
通常,第一个条目为0,因为我们正在寻找y = 0。
第二个条目是2,因为我们正在寻找y = 1
第三个条目将为零,因为我们正在寻找y = 3
等...
df =
y gdp cap
0 1 2 5
1 2 3 9
2 4 7 2
3 5 4 7
4 6 7 7
df_lag =
y gdp cap y_prev gdp_lag
0 1 2 5 0 0
1 2 3 9 1 2
2 4 7 2 3 0
3 5 4 7 4 7
4 6 7 7 5 4
有没有简单的方法呢?
答案 0 :(得分:2)
您不需要shift
方法,只需进行查找即可。我将y
设为简单系列的索引,并使用.loc
来访问值:
df['y_prev'] = df['y'] - 1
df[['y', 'gdp']].set_index('y', drop=True).loc[df['y_prev']]
输出:
gdp
y
0 NaN
1 2.0
3 NaN
4 7.0
5 4.0
为了将这些值分配给新列,您需要删除索引(使用.values
):
df['gdp_lag'] = df[['y', 'gdp']].set_index('y', drop=True).loc[df['y_prev']].values