python:pandas dataframe中的列有条件地在一列上移位一列

时间:2016-06-09 08:06:40

标签: python pandas dataframe

我有一个熊猫数据框。我想“延迟”#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  

有没有简单的方法呢?

1 个答案:

答案 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