Сравнение двух столбцов информационного кадра с новым столбцом информационного кадра - PullRequest
4 голосов
/ 19 сентября 2019

У меня есть два кадра данных, которые выглядят как

   team  points
0     1     2.5
1     2     3.2
2     5     5.8
3     3     2.8
4     4     1.9

и:

   team1  team2
0      1      5
1      2      4
2      3      1

Ожидаемый результат должен дать мне новый столбец с победителем (больше очков):

team1   team2   winner
 1         5       5
 2         4       2
 3         1       3

Ответы [ 4 ]

3 голосов
/ 19 сентября 2019

Стараясь избегать applymap и использовать lookup + reshape

x = df.set_index('team').lookup(df2.values.ravel('F'), ["points"]*df2.size)
                        .reshape(df2.shape, order='F')
                        .argmax(1)

df2['winner'] = df2.lookup(df2.index, df2.columns[x])

   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
3 голосов
/ 19 сентября 2019

здесь есть способ, использующий applymap, df.idxmax() и df.lookup:

s=df2.applymap(df1.set_index('team')['points'].get).idxmax(1)

или лучшую альтернативулюбезно @ user3483203

s=df2.stack().map(df1.set_index('team')['points']).unstack().idxmax(1)
#s.tolist() gives ['team2', 'team1', 'team1']
df2['winner']=df2.lookup(s.index,s)
print(df2)

   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
0 голосов
/ 20 сентября 2019

Мое "простое" решение:

df3= df2.replace(df1.set_index("team").points.to_dict()) 
df2["winner"]= np.where(df3.team1>=df3.team2,df2.team1,df2.team2)
0 голосов
/ 19 сентября 2019

Альтернативное решение только с использованием pandas.Series.map , DataFrame.stack и DataFrame.unstack:

df_match['winner']=df_match.stack().map(df.set_index('team')['points']).unstack().max(axis=1).map(df.set_index('points')['team'])

print(df_match)

   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...