Разница между двумя столбцами данных - PullRequest
1 голос
/ 14 октября 2019

Я новичок в python и хотел бы узнать разницу между двумя столбцами данных. Я хочу найти разницу между двумя столбцами и соответствующим третьим столбцом. Например, у меня есть датафрейм Soccer, который содержит список всей команды, играющей в футбол, с целями против и за свой клуб. Я хотел выяснить разницу между целями и названием команды. То есть (Goals Diff = goalFor-goalAgainst).

 Pos             Team  Seasons Points GamesPlayed GamesWon GamesDrawn  \
0    1      Real Madrid       86   5656        2600     1647        552   
1    2        Barcelona       86   5435        2500     1581        573   
2    3  Atletico Madrid       80   5111        2614     1241        598   


GamesLost GoalsFor GoalsAgainst
0       563     5947         3140   
1       608     5900         3114     
2       775     4534         3309    

Я попытался создать функцию, а затем выполнить итерацию по каждой строке кадра данных, как показано ниже:

for index, row in football.iterrows():
        ##pdb.set_trace()
        goalsFor=row['GoalsFor']
        goalsAgainst=row['GoalsAgainst']
        teamName=row['Team']
        if not total:
            totals=np.array(Goal_diff_count_Formal(int(goalsFor), int(goalsAgainst), teamName))
        else:
            total= total.append(Goal_diff_count_Formal(int(goalsFor), int(goalsAgainst), teamName))

    return total

def Goal_diff_count_Formal(gFor, gAgainst, team):
goalsDifference=gFor-gAgainst
return [team, goalsDifference]

Однако я хотел бы знать, есть ли самый быстрый способ получитьэто что-то вроде

dataframe['goalsFor'] - dataframe['goalsAgainst'] #along with the team name in the dataframe

1 Ответ

1 голос
/ 14 октября 2019

Решение, если уникальные значения в столбце Team - создать индекс по Team, получить разницу и выбрать Team по индексу:

df = df.set_index('Team')
s = df['GoalsFor'] - df['GoalsAgainst'] 
print (s)
Team
Real Madrid        2807
Barcelona          2786
Atletico Madrid    1225
dtype: int64

print (s['Atletico Madrid'])
1225

Решение, если возможно, дублировать значения в Team колонка:

Я полагаю, вам нужно сначала сгруппировать по Team и агрегировать sum, а затем получить разницу:

#change sample data for Team in row 3
print (df)
   Pos         Team  Seasons  Points  GamesPlayed  GamesWon  GamesDrawn  \
0    1  Real Madrid       86    5656         2600      1647         552   
1    2    Barcelona       86    5435         2500      1581         573   
2    3  Real Madrid       80    5111         2614      1241         598   

   GamesLost  GoalsFor  GoalsAgainst  
0        563      5947          3140  
1        608      5900          3114  
2        775      4534          3309  


df = df.groupby('Team')['GoalsFor','GoalsAgainst'].sum()
df['diff'] = df['GoalsFor'] - df['GoalsAgainst'] 
print (df)
             GoalsFor  GoalsAgainst  diff
Team                                     
Barcelona        5900          3114  2786
Real Madrid     10481          6449  4032

РЕДАКТИРОВАТЬ:

s = df['GoalsFor'] - df['GoalsAgainst'] 
print (s)
Team
Barcelona      2786
Real Madrid    4032
dtype: int64

print (s['Barcelona'])
2786
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...