Having dismissed the visitors for 295 on a pitch that appears to be getting easier to bat on, England reached 219 for six at the close of day two.
Liam Plunkett (4) and Matt Prior (2) will look to reach India’s total on Saturday should the predicted poor weather hold off, while the tourists will be desperate to take a lead into their second innings.
Bhuvneshwar Kumar was the pick of the Indian bowlers, getting rid of captain Alastair Cook and Sam Robson before lunch and Ian Bell after the break.
The hosts also lost Joe Root before Ballance and Moeen, two of England’s success stories in what has been a tough period after series defeats by Australia and Sri Lanka, combined to good effect.
They put on 98 for the fifth wicket, having come together with their side in trouble at 113 for four.
While others in England’s order struggle, Zimbabwe-born Ballance continues to prosper at number three, scoring two centuries and two half-centuries in his last five turns at the crease.
He hit 15 boundaries in total, reaching three figures off 186 balls when he flicked Stuart Binny through the on side.
After lofting the first ball he faced to the fence, Moeen showed commendable patience in supporting Ballance before being trapped lbw by part-time spinner Murali Vijay for 32.
Ballance fell shortly after the new ball was taken, well caught down the leg side by Mahendra Singh Dhoni to become Kumar’s fourth wicket.
“To score a hundred at Lord’s is amazing really, I can’t think of anything better than that,” Ballance, who was pictured in British media topless at a Nottingham bar after the drawn first test, told a news conference.
“It’s been an interesting week, I didn’t really expect it, it’s nice to score runs and put ourselves back in a decent position.
“I did not see it coming, it was a bit embarrassing to be honest, I was probably a bit naive. I didn’t break any rules and was just having fun after a test match. I’ll learn from that and probably won’t be doing that again.
“It’s great to score runs, and I think even better after what happened.”
Question marks remain over the form of Cook, however, who has not passed three figures in over a year and has now scored 93 runs in six test innings against Sri Lanka and India this season after this latest failure.
He looked comfortable at the crease before nibbling at a ball from the accurate Kumar that was caught by Dhoni behind the stumps, a combination of poor footwork and lack of conviction contributing to his downfall.
“He’ll obviously be disappointed not getting a score today, but he’ll keep working hard and keep trying to put those performances in, I’m sure it will be a matter of time before he gets a big score,” Ballance said of his skipper.Fellow opener Sam Robson’s determination to fling the bat at a ball from Kumar saw him off for 17, while Ian Bell was taken by surprise by a delivery that jagged in and caught him on the glove, catches being taken by Dhoni and Jadeja respectively.
Joe Root was starting to look comfortable before being given out lbw to spinner Ravindra Jadeja despite him getting an inside edge.
“It’s a great thing to get four wickets here but the more important thing is to get them out as early as possible tomorrow,” Kumar said.
“We had a plan, but having said that, if you’ve got a supportive wicket especially then you have to be more disciplined than normal.”
Earlier India’s first innings lasted only ten balls of the morning session before Ben Stokes had Shami caught by Cook, his 100th test catch, with five runs added to the overnight score.
The quick breakthrough was scant consolation for the hosts, who had India at 145 for seven just after tea on Thursday before Ajinkya Rahane (103) combined with the lower order to ensure their bowlers had a total to defend.
(Editing by Steve Tongue/Tony Goodson)