2016-12-07 3 views
0

J'essaie de calculer la plus grande différence entre le nombre de médailles d'or estivales et le nombre de médailles d'or hivernales par rapport à leur total de médailles d'or. Le problème est que je dois considérer seulement les pays qui ont gagné au moins une médaille d'or en été et en hiver.Valeur maximale en utilisant idxmax

Or: Nombre de médailles d'or d'été

Gold.1: Nombre de médailles d'or d'hiver

Gold.2: Total d'or

Cet échantillon de mes données:

  Gold Gold.1 Gold.2 ID diff gold % 
Afghanistan 0  0  0  AFG NaN 
Algeria  5  0  5  ALG 1.000000 
Argentina 18  0  18  ARG 1.000000 
Armenia  1  0  1  ARM 1.000000 
Australasia 3  0  3  ANZ 1.000000 
Australia 139  5  144  AUS 0.930556 
Austria  18  59  77  AUT 0.532468 
Azerbaijan 6  0  6  AZE 1.000000 
Bahamas  5  0  5  BAH 1.000000 
Bahrain  0  0  0  BRN NaN 
Barbados 0  0  0  BAR NaN 
Belarus  12  6  18  BLR 0.333333 

Ceci est le code que j'ai, mais il donne une mauvaise réponse:

def answer(): 
    Gold_Y = df2[(df2['Gold'] > 1) | (df2['Gold.1'] > 1)] 
    df2['difference'] = (df2['Gold']-df2['Gold.1']).abs()/df2['Gold.2'] 
    return df2['diff gold %'].idxmax() 

answer() 
+0

S'il y a quelque chose qui n'est pas clair dans ma question, j'apprécierai que vous puissiez commenter au lieu de rétrograder ma question. Je suis nouveau pour empiler le flux et je ne comprends pas tout le formatage !!! – nanny

Répondre

1

Essayez ce code après avoir inséré la bonne (votre) fonction et les noms des variables. Je suis nouveau sur Python, mais je pense que le problème était que vous deviez utiliser la même variable dans Line 4 (df1 ['difference']), et juste ajouter la méthode (.idxmax()) à la fin. Je ne pense pas que vous ayez besoin de la première ligne de code pour la fonction, car vous n'utilisez pas la variable locale (Gold_Y). FYI - Je ne pense pas que nous travaillons avec le même ensemble de données.

def answer_three(): 
    df1['difference'] = (df1['Gold']-df1['Gold.1']).abs()/df1['Gold.2'] 
    return df1['difference'].idxmax() 

answer_three() 
0
def answer_three(): 
    _df = df[(df['Gold'] > 0) & (df['Gold.1'] > 0)] 
    return ((_df['Gold'] - _df['Gold.1'])/_df['Gold.2']).argmax() answer_three() 
0

Cela ressemble à une question de l'affectation de programmation de cours de courser - « Introduction à la science des données en Python »

Après avoir dit que si vous n'êtes pas tricher « peut-être » le bug est ici:

Gold_Y = df2[(df2['Gold'] > 1) | (df2['Gold.1'] > 1)] 

Vous devez utiliser l'opérateur &. L'opérateur | signifie que vous avez des pays qui ont gagné l'or dans les jeux olympiques d'été ou d'hiver.

Vous ne devriez pas avoir un NaN dans votre or diff.