将熊猫数据框中的列向上移动一位?

Posted

技术标签:

【中文标题】将熊猫数据框中的列向上移动一位?【英文标题】:Shift column in pandas dataframe up by one? 【发布时间】:2013-11-20 12:12:11 【问题描述】:

我有一个熊猫数据框。我想“滞后”我的一个专栏。例如,将整列“gdp”向上移动 1,然后删除剩余行底部的所有多余数据,使所有列的长度再次相等。

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

无论如何要这样做?

【问题讨论】:

【参考方案1】:
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

【讨论】:

只需使用df.dropna(),它将删除所有 NaN 行,而无需指定要删除的行数。【参考方案2】:

将列 gdp 上移:

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

然后删除最后一行

【讨论】:

【参考方案3】:

例如,轻松地移动 5 个值并摆脱 NaN 行,而无需跟踪您移动的值的数量:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:
df.gdp = df.gdp.shift(-1) ## shift up
df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row

【讨论】:

【参考方案6】:

先移列:

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

第二次删除包含 NaN Cell 的最后一行:

df = df[:-1]

第三次重置索引:

df = df.reset_index(drop=True)

【讨论】:

以上是关于将熊猫数据框中的列向上移动一位?的主要内容,如果未能解决你的问题,请参考以下文章

根据熊猫数据框中的列标签对数据进行分组

遍历熊猫数据框中的列

如何将包含列表的列转换为熊猫数据框中的单独列? [复制]

如何使用嵌套字典列表展平熊猫数据框中的列

确定熊猫数据框中的列值何时更改

如何根据列的值对熊猫数据框中的列进行分类?