>>> def combine_like_radicals(expr):
... from sympy.utilities.iterables import sift
... reps = {}
... for m in expr.atoms(Mul):
... rads = [p for p in m.atoms(Pow) if p.exp.is_Rational]
... sifted = sift(rads, lambda x: x.args[1].as_numer_denom())
... for k, v in sifted.items():
... if len(sifted[k]) > 1:
... e = Rational(*k)
... b = Mul(*[p.base for p in v])
... reps[Mul(*v)] = Pow(b, e, evaluate=False)
... return expr.xreplace(reps)
...
>>> sqrt(pi*x)+root(3*pi*x,3)
3**(1/3)*pi**(1/3)*x**(1/3) + sqrt(pi)*sqrt(x)
>>> combine_like_radicals(_)
sqrt(pi*x) + (3*pi*x)**(1/3)