Search code examples
pythonpandasdataframedictionaryframe

How to make a new row by taking the percentage of two other rows in a table on python


So I have a pandas data frame that shows the number of shots taken and the number of goals scored for a list of hockey games from different coordinates. The data frame lists the shots and goals like this (4, 2), and I want to add another column that divides the goals by the shots to give shot percentage for each coordinate. So far here is my code...

key in contents['liveData']['plays']['allPlays']:
        # for plays in key['result']['event']:
            # print(key)
        if (key['result']['event'] == "Shot"):
            #print(key['result']['event'])
            scoordinates = (key['coordinates']['x'], key['coordinates']['y'])
            if scoordinates not in shots:
                shots[scoordinates] = (1, 0)
            else:
                shots[scoordinates] = tuple(map(sum, zip((1, 0), shots[scoordinates])))
        if (key['result']['event'] == "Goal"):
            #print(key['result']['event'])
            gcoordinates = (key['coordinates']['x'], key['coordinates']['y'])
            if gcoordinates not in shots:
                shots[gcoordinates] = (1, 1)
            else:
                shots[gcoordinates] = tuple(map(sum, zip((1, 1), shots[gcoordinates])))
  
#create data frame using pandas
pd.set_option("display.max_rows", None, "display.max_columns", None)
sdf = pd.DataFrame(list(shots.items()),columns = ['Coordinates','Occurences (S, G)'])
file.write(f"{sdf}\n")

this gives the result data frame this--

    Coordinates Occurences (S, G)
0      (78.0, -19.0)            (2, 1)
1     (-37.0, -10.0)            (2, 0)
2      (47.0, -23.0)            (3, 1)
3       (53.0, 14.0)            (1, 0)
4       (77.0, -2.0)            (8, 4)
5        (80.0, 1.0)           (12, 5)
6       (74.0, 14.0)            (7, 0)
7       (87.0, -3.0)            (1, 1)

If anyone can help that would be great!


Solution

  • Try this:

    df['new_col']=df['old_col'].apply( lambda x: x[1]/x[0])