Both '%' and .format() support both positional and named arguments.
There are probably a few use cases for .format() (vs. f-strings) but overall I don't believe there is much reasons left to prefer %.
Note that the existence, and popularity, of tools like flynt and pyupgrade (that convert % and .format() directives to f-strings automatically) supports this affirmation.
I found the 'un-fstring' project on pypi that does the reverse, but it's use case, as advertised in the README, is clear: "Sometimes, unfortunately, you need to write code that is compatible with Python 3.5"...
S.