如何在 pandas 数据框中使用“df.shift(n)”,以便可以将“n”项从下到上而不是“nan”值,反之亦然?

问题描述 投票:0回答:1

我有一个 pandas 数据框

df
包含 5 行和 2 列。

A   B
0   10  0
1   20  5
2   30  10
3   40  15
4   50  20

df.to_dict()
回归

{'A': {0: 10, 1: 20, 2: 30, 3: 40, 4: 50},
 'B': {0: 0, 1: 5, 2: 10, 3: 15, 4: 20}}

对于 A 列,我想将每个项目移动到下面两行。我不想将

nan
值放在顶部,而是想将两个从底部推出到顶部的元素。

对于 B 列,我想做相反的事情 - 将每个项目移动到上面两行。我不想将

nan
值放在底部,而是希望将两个元素从顶部推出到底部。

我可以使用

df["A"].shift(2)
df["B"].shift(-2)
。但是,我得到了 nan 值。

我的预期结果是:

A   B
0   40  10
1   50  15
2   10  20
3   20  0
4   30  5

我怎样才能实现这个目标?

python python-3.x pandas dataframe shift
1个回答
1
投票

使用

numpy.roll
代替
shift
:

df['A'] = np.roll(df["A"], 2)
df['B'] = np.roll(df["B"], -2)
print (df)
    A   B
0  40  10
1  50  15
2  10  20
3  20   0
4  30   5
© www.soinside.com 2019 - 2024. All rights reserved.