将pandas数据框中的列向上移一个?

时间:2013-11-20 12:12:12

标签: python pandas dataframe

我有一个熊猫数据帧。我想“滞后”我的一个专栏。这意味着,例如,将整个列'gdp'向上移动一个,然后删除剩余行底部的所有多余数据,以便所有列的长度都相等。

df =
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7

df_lag =
    y  gdp  cap
0   1    3    5
1   2    7    9
2   8    4    2
3   3    7    7

无论如何要做到这一点?

6 个答案:

答案 0 :(得分:105)

In [44]: df['gdp'] = df['gdp'].shift(-1)

In [45]: df
Out[45]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7
4  6  NaN    7

In [46]: df[:-1]                                                                                                                                                                                                                                                                                                               
Out[46]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7

答案 1 :(得分:7)

将列gdp向上移动:

df.gdp = df.gdp.shift(-1)

然后删除最后一行

答案 2 :(得分:2)

df.gdp = df.gdp.shift(-1) ## shift up
df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row

答案 3 :(得分:1)

时间在流逝。目前的 Pandas 文档推荐这种方式:

 df.loc[:, 'gdp'] = df.gdp.shift(-1)

答案 4 :(得分:0)

例如,轻松移位5个值并摆脱NaN行,而不必跟踪移位的值数:

d['gdp'] = df['gdp'].shift(-5)
df = df.dropna()

答案 5 :(得分:0)

首先移动列:

df['gdp'] = df['gdp'].shift(-1)

第二个删除包含NaN单元格的最后一行:

df = df[:-1]

第三次重置索引:

df = df.reset_index(drop=True)