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

nat*_*002 66 python dataframe pandas

我有一个熊猫数据帧.我想"滞后"我的一个专栏.这意味着,例如,将整个列'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
Run Code Online (Sandbox Code Playgroud)

无论如何要做到这一点?

Wou*_*ire 118

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
Run Code Online (Sandbox Code Playgroud)

  • 只需使用 `df.dropna()`,它就会删除所有 NaN 行,而无需指定要删除的行数。 (2认同)

小智 7

shift column gdp up:

df.gdp = df.gdp.shift(-1)
Run Code Online (Sandbox Code Playgroud)

然后删除最后一行


Vas*_*ets 6

时间在流逝。当前的 Pandas 文档推荐这样:

 df.loc[:, 'gdp'] = df.gdp.shift(-1)
Run Code Online (Sandbox Code Playgroud)


小智 5

首先移动列:

df['gdp'] = df['gdp'].shift(-1)
Run Code Online (Sandbox Code Playgroud)

其次删除包含 NaN 单元格的最后一行:

df = df[:-1]
Run Code Online (Sandbox Code Playgroud)

第三次重置索引:

df = df.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)