我有一个熊猫数据帧。我想“滞后”我的一个专栏。这意味着,例如,将整个列'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
无论如何要做到这一点?
答案 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)