Faits : A. A.a. Z._, née en décembre 1943, est locataire depuis 1977 d'un appartement de 4,5 pièces au premier étage d'un immeuble situé à la route... à Genève. Depuis juillet 1993, le loyer mensuel est de 831 fr. (696 fr. plus 135 fr. de charges). Le bail est renouvelable tacitement d'année en année, sauf préavis de résiliation donné trois mois avant l'échéance du 31 octobre. A.b. Par contrat du 28 avril 2012, la locataire a sous-loué l'appartement à S._ pour la période du 1 er juillet 2012 au 30 juin 2013, avec possibilité de renouvellement tacite d'année en année. Le sous-loyer mensuel a été fixé à 1'000 fr. (865 fr. plus 135 fr. de charges). La convention précisait que l'appartement était partiellement meublé. Dans un courrier du 31 mai 2012, la locataire a demandé à la bailleresse X._ l'autorisation de sous-louer l'appartement. Elle expliquait qu'après avoir atteint l'âge de la retraite il y a quelques années, elle allait quitter la Suisse pour rejoindre son compagnon en Espagne. Toutefois, étant de nationalité suisse et ayant vécu plus de soixante ans à Genève, elle n'excluait pas d'y revenir si la vie en Espagne devait ne pas lui convenir. Le contrat de sous-location et un "inventaire des meubles et objets de l'appartement" étaient annexés à cette missive. Le 8 juin 2012, la régie immobilière mandatée par la bailleresse a répondu que la sous-location était acceptée pour la période du 1 er juillet 2012 au 30 juin 2013, étant précisé qu'à cette échéance, la locataire devrait réintégrer son logement ou le restituer. La locataire, qui a la double nationalité espagnole et suisse, a quitté la Suisse pour l'Espagne à la fin du mois de juin 2012. Elle a annoncé son départ à l'Office cantonal de la population et s'est domiciliée en Catalogne, où elle habite dans un appartement avec son compagnon de nationalité française, qu'elle connaît depuis 1968. Elle ne paie plus d'impôts en Suisse et n'a plus d'assurance-maladie. Elle a donné une procuration sur son compte bancaire à une amie qui habite dans l'immeuble.... A.c. Par lettre du 31 mai 2013, la locataire a informé la régie qu'elle souhaitait conserver le bail de l'appartement. Elle expliquait se trouver provisoirement en Espagne, pays qui lui plaisait. Toutefois, elle constatait après une année qu'elle n'avait pas l'intention d'y finir ses jours et que la Suisse, où elle avait vécu toute sa vie, lui manquait. Elle était venue régulièrement à Genève voir sa fille, sa famille et ses amis et avait l'intention d'y revenir fréquemment avant de s'y réinstaller. "Actuellement", la sous-locataire lui versait 750 fr. par mois car elle-même avait gardé la jouissance exclusive d'une chambre et pouvait utiliser la cuisine et le salon. Elle avait laissé une partie de son mobilier et ses ustensiles de cuisine dans l'appartement. La régie a répondu le 13 juin 2013 que la sous-location avait été autorisée pour une période d'une année non renouvelable, afin de permettre à la locataire d'apprécier les conditions de son installation en Espagne. Dans la mesure où la locataire avait annoncé son départ à l'Office cantonal de la population, elle avait valablement transféré son domicile à l'étranger et n'avait plus de raison valable de prolonger la sous-location. Aussi était-elle invitée soit à réintégrer l'appartement au 30 juin 2013, soit à convenir de la date à laquelle le bail pourrait être résilié d'un commun accord, étant précisé que la bailleresse n'était pas opposée à lui accorder quelques mois supplémentaires pour permettre à la sous-locataire de s'organiser. En l'absence de réintégration ou d'accord négocié avant le 1 er juillet 2013, la bailleresse prendrait les dispositions prévues par la loi. Le 27 juin 2013, la locataire a répliqué qu'elle venait régulièrement à Genève, où elle avait vécu toute sa vie et où se trouvaient sa fille, ses amis et de "nombreux liens artistiques". Elle n'avait pas à réintégrer un appartement qu'elle n'avait jamais quitté. Elle allait donc sous-louer une chambre de son appartement à sa "locataire actuelle". Par avis du 2 juillet 2013, la bailleresse a résilié le bail pour le 31 octobre 2013. Dans sa lettre d'accompagnement, elle précisait qu'elle n'entendait pas laisser la locataire "poursuivre une sous-location quelconque". Le domicile actuel de la locataire était en Espagne depuis suffisamment longtemps pour qu'un retour à Genève puisse être raisonnablement exclu. La situation actuelle constituait en réalité un transfert de bail non autorisé. B. B.a. La locataire a saisi l'autorité de conciliation le 2 août 2013, puis déposé une demande le 20 janvier 2014 devant le Tribunal des baux et loyers du canton de Genève. Elle concluait principalement à l'annulation du congé, subsidiairement à une prolongation de bail de quatre ans échéant le 31 octobre 2017, avec possibilité de restituer les locaux en tout temps moyennant un préavis d'une semaine. Le Tribunal a procédé à l'interrogatoire des parties et à l'audition de témoins. La locataire a déclaré qu'elle n'excluait pas de revenir s'installer à Genève en fonction notamment des aléas de sa vie privée. A ce stade, elle n'avait entamé aucune démarche auprès de l'Office cantonal de la population. Elle revenait régulièrement à Genève, parfois en avion mais le plus souvent en voiture, pour voir sa fille (qui travaillait à Zurich et disposait d'un pied-à-terre à Genève), ses amis et ses contacts professionnels, étant précisé qu'elle était compositeur. Elle prévenait la sous-locataire de ses séjours le plus souvent par mail, parfois par téléphone ou SMS. Durant huit à neuf mois, la sous-locataire avait sous-loué tout l'appartement. Elles avaient ensuite convenu, en raison des fréquents séjours de la locataire à Genève, de laisser à celle-ci l'usage d'une des deux chambres et de réduire le sous-loyer à 750 fr. par mois. L'amie de la locataire habitant l'immeuble encaissait le sous-loyer et payait à la bailleresse le loyer et le supplément de charges. La sous-locataire a pour sa part expliqué qu'elle travaillait à Genève et Lausanne, vivant environ trois jours par semaine à Genève et quatre jours en Valais, où elle avait acquis un logement et déposé ses papiers en 2011. Avant de conclure la sous-location, elle ne connaissait pas la locataire, qui était devenue une amie au fil du temps. La sous-location s'était d'abord faite pour 1'000 fr. par mois, puis pour 750 fr. dès juin 2013; la locataire avait proposé cette baisse du fait que depuis le début, elle dormait dans une des chambres de l'appartement lorsqu'elle séjournait à Genève, soit environ une semaine tous les deux ou trois mois. La locataire avait conservé un jeu de clés. Lorsque la régie avait annoncé qu'il fallait mettre fin à la sous-location, la locataire avait indiqué à la sous-locataire qu'elle songeait peut-être à rentrer en Suisse d'ici quelques années. A l'audience des plaidoiries finales, le collaborateur de l'ASLOCA représentant la locataire a plaidé que la sous-location n'était que partielle; la locataire n'avait pas à réintégrer un logement qu'elle n'avait quitté que pendant un an, soit le temps de la première année pendant laquelle elle avait sous-loué l'entier de l'appartement. B.b. Par jugement du 1 er décembre 2014, le Tribunal des baux et loyers a annulé le congé (ch. 1 du dispositif) et rejeté toutes autres conclusions (ch. 2). En substance, il a jugé que le motif invoqué à l'appui du congé - une sous-location équivalant à un transfert de bail déguisé - n'était qu'un prétexte, de sérieux doutes planant sur l'intention déclarée de louer l'appartement à une personne en ayant réellement besoin. Le congé contrevenait ainsi aux règles de la bonne foi. B.c. Statuant sur appel de la bailleresse, la Cour de justice a confirmé ce jugement par substitution de motifs. Après avoir constaté que le motif réel du congé était la sous-location non autorisée, elle est arrivée à la conclusion que le congé fondé sur un tel motif contrevenait aux règles de la bonne foi. Dans un premier temps, la locataire avait sous-loué la totalité de l'appartement. Toutefois, au moment de la résiliation, la sous-location n'était que partielle, ce qui avait d'ailleurs entraîné une réduction du sous-loyer. Même si elle avait déplacé son domicile à l'étranger, la locataire n'avait pas entièrement perdu l'usage de l'appartement, qu'elle occupait durant une semaine tous les deux ou trois mois. Elle n'avait pas d'obligation contractuelle d'utiliser les locaux de manière permanente. Elle avait mis ceux-ci à disposition d'une personne qui n'y séjournait pas constamment, mais seulement trois jours par semaine pour des raisons professionnelles. Pour le surplus, la bailleresse ne prétendait pas que la sous-location partielle serait régie par des conditions abusives, ni qu'elle présenterait pour elle des inconvénients majeurs. La bailleresse n'était pas légitimée à interdire par principe toute sous-location. C. La bailleresse saisit le Tribunal fédéral d'un recours en matière civile tendant à faire constater la validité du congé signifié pour le 31 octobre 2013 et à faire rejeter toutes autres ou contraires conclusions de la locataire. La locataire intimée conclut au rejet du recours. L'autorité précédente se réfère à son arrêt.