How To Shift Entire Groups In Pandas Groupby
Given the following data: data = {'a' : [1,1,1,8,8,3,3,3,3,4,4] } df = pd.DataFrame(data) I would now like to shift the whole thing down by n groups, so that their current order i
Solution 1:
This is an interesting operation. I can think of an alternative way to do it with replace.
To shift by 1 group:
>>>df['b'] = df.a.shift()>>>x = df[df.a != df.b]>>>df.replace(*x.values.T)Which gives the DataFrame:
a b
0NaNNaN1NaNNaN2NaNNaN31NaN4115816887888889381033And we just want column a of this DataFrame:
desired_output_df = pd.DataFrame(_, columns=['a'])
To shift by more than one group, you just need to shift column b of x. If you want to shift by n groups, you need to shift x.b an additional n-1 times. Just insert the line
>>>x.b = x.b.shift(n-1)after x = df[df.a != df.b] and then perform the df.replace(*x.values.T) step.
Post a Comment for "How To Shift Entire Groups In Pandas Groupby"