I have a pandas dataframe df containing 5 rows and 2 columns.
A B
0 10 0
1 20 5
2 30 10
3 40 15
4 50 20
df.to_dict() returns
{'A': {0: 10, 1: 20, 2: 30, 3: 40, 4: 50},
'B': {0: 0, 1: 5, 2: 10, 3: 15, 4: 20}}
For column A, I want to shift each item to two rows below. Instead of having nan values on top, I want to bring two elements that would be pushed out in the bottom to the top.
For column B, I want to do the opposite - shift each item to two rows above. Instead of having nan values on bottom, I want to bring two elements that would be pushed out in the top to the bottom.
I can use df["A"].shift(2) and df["B"].shift(-2). However, I get nan values.
My expected results is:
A B
0 40 10
1 50 15
2 10 20
3 20 0
4 30 5
How can I achieve this?
Use
numpy.rollinsteadshift: