Alternatively shift columns and rows of a 2D array Objective
Given a 2D array of any size, write a program or function to shift alternatively the columns and rows
Example
a b c d e
f g h i j
k l m n o

All elements in the first column shift down one row, the second column shift up one row, the third shift down one row and so on, wrapping when they reach the edge.
k g m i o
a l c n e
f b h d j  

All elements in the first row shift to the right, the second to to the left, the third to the right etc., wrapping when they reach the edge.
o k g m i
l c n e a
j f b h d

I will follow the tradition of selecting the shortest working code as the best answer
MATL, 13 bytes
,!tZy:oEq2&amp;YS

Try it online!
Explanation
,        % Do twice
  !      %   Transpose. Takes input implicitly the first time
  t      %   Duplicate
  Zy     %   Size. Gives a vector with numbers of rows and of columns
  :      %   Range from 1 to the first entry of the vector (number of rows)
  o      %   Parity: gives 0 or 1 for eacn entry
  Eq     %   Times 2, minus 1: transforms 0 into -1
  2      %   Push 2
  &amp;YS    %   Circularly shift along the second dimension. This shifts the
         %   first row by 1 (that is, to the right), the second by -1 (to
         %   the left), etc.
         % End (implicit). Display (implicit)