C++ (gcc), 197 \$\cdots\$ 182175 175174 bytes
#import<regex>
using V=std::vector<int>;voidvector<int>;int f(V&v){V i=v,r=v;int y=0,n,j;for(int&a:i)a=y++;std::random_shuffle(&i[0],&*end(i));for(j=n=rand()%y+1;j;)r[i[--j]]=v[i[j%n]];v=r;}
Added 2 bytes to fix an error.
Saved 3 5 bytes thanks to ceilingcat!!!
Inputs a vector of integers.
Randomly shuffles a random subgroup of the elements in place.