J'ai un bloc de données qui ressemble à ceci (voir ci-dessous):
NBAData['TotalTeamVal'] = NBAData.groupby(['Team', 'Player Name'])['PlayerMarketValue'].first().sum()
J'essaie de trouver un bon moyen de regrouper à la fois Team
et ensuite PlayerName et à partir de là, prenez la première instance de PlayerMarketValue
, puis additionnez-la et écrivez cette valeur dans son équipe
respective.
J'ai touché le bloc après être arrivé à:
Player Name Team PlayerMarketValue Steph Curry Golden State Warriors 169027.4782 Steph Curry Golden State Warriors 169027.4782 Steph Curry Golden State Warriors 169027.4782 Steph Curry Golden State Warriors 169027.4782 Lebron James All Stars 120896.3772 Lebron James All Stars 120896.3772 Lebron James All Stars 120896.3772 Luka Doncic All Stars 36789.6562 Luka Doncic All Stars 36789.6562 Luka Doncic All Stars 36789.6562
Ie: Je recherche (notez le All Stars
en particulier):
3 Réponses :
Sans en savoir beaucoup sur la structure des données, je suppose qu'un joueur ne peut faire partie que d'une des équipes, donc je commencerais
DataFrame
principal en utilisant les colonnes de l'équipe comme clé pd.merge(df, df.drop_duplicates('Player Name').groupby(['Team'])['PlayerMarketValue'].sum().reset_index(), on='Team', suffixes= ['', '_Team'] )
Merci pour votre contribution - c'était très concis et utile.
Vous pouvez regrouper par équipe sur le nouveau dataframe, obtenir la valeur totale et fusionner:
df.merge(df.groupby(['Player Name', 'Team']) .PlayerMarketValue.first() .groupby(['Team']).sum(), left_on='Team', right_index=True, suffixes=('','Total') )
Pourquoi ne pas utiliser groupby transform? Est-ce que je manque quelque chose
Transformez-vous sur quel groupe par?
ou pourquoi groupby
deux fois, alors que vous voulez simplement supprimer les doublons ...?
@ user7440787 c'est vrai. Cependant, vous avez déjà répondu avec drop_duplicates
, et cela va dans le sens de la pensée d’OP.
@Datanovice Vous auriez probablement un problème avec les dimensions de la dataframe résultante (c'est pourquoi nous utilisons la fusion) ou, d'autre part, une opération inefficace car vous auriez à calculer la valeur totale de chaque équipe, encore et encore.
@QuangHoang désolé, vient de reprendre la question, cela a du sens maintenant, merci mon pote.
Merci @QuangHoang pour votre contribution - malheureusement, cela n'a pas fonctionné pour moi tout de suite. Le problème était qu'il fallait une étape supplémentaire pour changer la série de pandas générés par le groupby en un dataframe avant de fusionner. Très apprécié pour votre contribution. C'est toujours bon de voir différentes perspectives et j'accepterais cela comme la réponse principale si je le pouvais.
Vous pouvez essayer la méthode mentionnée ci-dessous. J'espère que cela vous aidera.
NBAData=NBAData.groupby(["Player_name","Team"]).first()
Cela ne vous permettra d'obtenir que la première ligne de chaque groupe? Comment est-il censé répondre à la question?
Veuillez copier / coller les données sous forme de texte.
pourriez-vous s'il vous plaît clarifier pourquoi vous choisissez la première rangée? Existe-t-il un critère particulier ou simplement parce que vous avez besoin de l'une des valeurs?