transforming data by its matrix will make make its look right when location and rotation are 0,0,0 and size is 1,1,1
Separate by loose parts is the only thing you cant access from py.
Youd have to write one in python, if you want theres a functon that does most of the work in BPyMesh, (CVS) used from blenders quake map exporter. returns lists of faces in their groups.
use mesh.copy() and remove all face groups but one for each group.