I have following dataset.
game_id h_abbr a_abbr 
0001    WSH    TOR 
0002    ANA    TOR 
0003    TOR    MIN
I want to count how many games each team has played so far. Output should be like this
game_id h_abbr a_abbr ht_game_no at_game_no
0001    WSH    TOR    1          1
0002    ANA    TOR    1          2
0003    TOR    MIN    3          1
                Use DataFrame.set_index with DataFrame.stack for MultiIndex Series, then use GroupBy.cumcount for counter, reshape by Series.unstack, add rename and add to original DataFrame by DataFrame.join:
s = df.set_index('game_id')[['h_abbr','a_abbr']].stack()
d = {'h_abbr':'ht_game_no','a_abbr':'at_game_no'}
df = df.join(s.groupby(s).cumcount().add(1).unstack().rename(columns=d), on='game_id')
print (df)
   game_id h_abbr a_abbr  ht_game_no  at_game_no
0        1    WSH    TOR           1           1
1        2    ANA    TOR           1           2
2        3    TOR    MIN           3           1
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With