Python Forum
Pandas - cumulative sum of two columns
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pandas - cumulative sum of two columns
#10
Glad I could help, btw I think it would be important to make sure that the 'Year' value actually groups games from particular season, not strictly a year.

import pandas as pd

def get_team_names(df):
    return df[0][0], df[1][0]

df  = pd.DataFrame([
["Gothenburg", "Malmo", 2010,"A"],
["Malmo","Gothenburg",  2010, "D"],
["Malmo", "Gothenburg", 2010, "A"],
["Gothenburg", "Malmo", 2010, "H"],
["Gothenburg", "Malmo" ,2011, "D"],
["Gothenburg", "Malmo", 2011, "A"],
["Gothenburg", "Malmo", 2011, "H"],
["Malmo", "Gothenburg", 2011, "A"],
["Gothenburg", "Malmo", 2012, "H"],
["Malmo", "Gothenburg", 2012, "H"],
[ "Malmo","Gothenburg", 2012, "D"],
[ "Malmo", "Gothenburg",2012, "H"],
["Malmo", "Gothenburg", 2013, "H"],
[ "Malmo","Gothenburg", 2013, "D"],
[ "Malmo", "Gothenburg",2013, "H"],
 
])

team_1, team_2 = get_team_names(df)

df.columns = ['H_team', 'A_team', 'Year', 'Result']

df['H_points'] = 0
df['A_points'] = 0

for year in set(df['Year']):

    draws = (df['Result']=='D').where(df['Year'] == year)

    hh = (df['Result']=='H').where((df['H_team'] == team_1) & (df['Year'] == year)) * 3
    ha = (df['Result']=='A').where((df['A_team'] == team_1) & (df['Year'] == year)) * 3

    ah = (df['Result']=='H').where((df['H_team'] == team_2) & (df['Year'] == year)) * 3
    aa = (df['Result']=='A').where((df['A_team'] == team_2) & (df['Year'] == year)) * 3

    team_1_points = hh.add(ha, fill_value=0).add(draws, fill_value=0).cumsum().shift(1)
    team_2_points = ah.add(aa, fill_value=0).add(draws, fill_value=0).cumsum().shift(1)

    df['H_points'] = df['H_points'].add( team_1_points.where(df['H_team'] == team_1, team_2_points), fill_value=0)
    df['A_points'] = df['A_points'].add( team_1_points.where(df['A_team'] == team_1, team_2_points), fill_value=0)

    # set first game of season to 0 points - https://stackoverflow.com/a/37911231/4620679
    # otherwise it would be equal to the sum of points from previous season (due to ".shift(1)" method)
    df.loc[df.index[df['Year'] == year][:1], 'H_points'] = 0 
    df.loc[df.index[df['Year'] == year][:1], 'A_points'] = 0

print(df)
Output:
H_team A_team Year Result H_points A_points 0 Gothenburg Malmo 2010 A 0.0 0.0 1 Malmo Gothenburg 2010 D 3.0 0.0 2 Malmo Gothenburg 2010 A 4.0 1.0 3 Gothenburg Malmo 2010 H 4.0 4.0 4 Gothenburg Malmo 2011 D 0.0 0.0 5 Gothenburg Malmo 2011 A 1.0 1.0 6 Gothenburg Malmo 2011 H 1.0 4.0 7 Malmo Gothenburg 2011 A 4.0 4.0 8 Gothenburg Malmo 2012 H 0.0 0.0 9 Malmo Gothenburg 2012 H 0.0 3.0 10 Malmo Gothenburg 2012 D 3.0 3.0 11 Malmo Gothenburg 2012 H 4.0 4.0 12 Malmo Gothenburg 2013 H 0.0 0.0 13 Malmo Gothenburg 2013 D 3.0 0.0 14 Malmo Gothenburg 2013 H 4.0 1.0
Reply


Messages In This Thread
Pandas - cumulative sum of two columns - by tobbs - May-19-2019, 09:29 AM
RE: Pandas - cumulative sum of two columns - by michalmonday - May-25-2019, 10:25 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  iretate over columns in df and calculate euclidean distance with one column in pandas Pit292 0 3,345 May-09-2021, 06:46 PM
Last Post: Pit292
  pandas.to_datetime: Combine data from 2 columns ju21878436312 1 2,484 Feb-20-2021, 08:25 PM
Last Post: perfringo
  Remove extra count columns created by pandas groupby spyf8 1 2,758 Feb-10-2021, 09:19 AM
Last Post: Naheed
  Pandas: summing columns conditional on the column labels ddd2332 0 2,164 Sep-10-2020, 05:58 PM
Last Post: ddd2332
  Difference of two columns in Pandas dataframe zinho 2 3,408 Jun-17-2020, 03:36 PM
Last Post: zinho
  Pandas dataframe columns collapsed in Spyder when printing UniKlixX 2 4,820 Nov-04-2019, 07:00 AM
Last Post: UniKlixX
  [pandas] How to re-arrange DataFrame columns SriMekala 8 5,016 Jun-22-2019, 12:55 AM
Last Post: scidam
  comparing two columns two different files in pandas nuncio 0 2,431 Jun-06-2018, 01:04 PM
Last Post: nuncio
  subtruction of columns in pandas garikhgh0 3 2,705 May-14-2018, 10:31 AM
Last Post: volcano63

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020