This is easy if you represent your points as complex numbers and use the exp function with an imaginary argument (which is equivalent to the cos/sin operations shown in the other answers, but is easier to write and remember). Here's a function that rotates any number of points about the chosen origin:
import numpy as np
def rotate(points, origin, angle):
return (points - origin) * np.exp(complex(0, angle)) + origin
To rotate a single point (x1,y1) about the origin (x0,y0) with an angle in degrees, you could call the function with these arguments:
points = complex(x1,y1)
origin = complex(x0,y0)
angle = np.deg2rad(degrees)
To rotate multiple points (x1,y1), (x2,y2), ..., use:
points = np.array([complex(x1,y1), complex(x2,y2), ...])
An example with a single point (200,300) rotated 10 degrees about (100,100):
>>> new_point = rotate(complex(200,300), complex(100,100), np.deg2rad(10))
>>> new_point
(163.75113976783473+314.3263683691346j)
>>> (new_point.real, new_point.imag)
(163.75113976783473, 314.3263683691346)