Lotta work! Interesting choreography of the dance, nice to see it all together. Congrats on completing first pass animation.
It looks a bit stiff to me. Next pass, you could introduce some head, hand, finger movement to loosen it up.
For example, (for both characters) the head looks like it turns/moves in sync with the torso. One could make it move as if it were the end of the upper body torso chain (like a "tail", if you get my drift) by introducing some side to side angled movement, lagging behind the turning of the torso.
Or, alternately, one could make the head lead the torso turn, as dancers tend to look first to the direction they are turning, prior to making the turn. As it is now, the head and torso for the most part look like they operate as one unit.
I would also suggest that you animate the hands (lagging behind the forearm), and also introduce some finger poses, for looser, more fluid motion.
If you have the time, to demonstrate to yourself what lagging, tail like movement might look like, you could quickly experiment with creating a model with 3 bones in a chain, and then apply a dynamic constraint to the last bone on frame 0. Then move the base bone (translate and rotate base bone to another position in a later frame), and watch how the A:M dynamic constraint automatically creates lagging motion for all the bones in a chain, that don't settle until even sometime after the last frame. Note that the bones don't move all together. And based on how loose you want it, the lag can be set differently (by tweaking properties of the dynamic constraint) to make it stiffer or looser.
You've come a long way! Congrats again.