Заменить и отобразить строковые значения в фрейме данных Python с помощью панд - PullRequest
0 голосов
/ 12 октября 2018

Привет, я пытался заменить строковые значения в кадре данных (строки являются аббревиатурой команд NFL), у меня есть что-то вроде этого:

Index   IDMatch Usr1    Usr2    Usr3    Usr4    Usr5
0       1       Phi     Atl     Phi     Phi     Phi
1       2       Bal     Bal     Bal     Buf     Bal
2       3       Ind     Ind     Cin     Cin     Ind
3       4       NE      NE      Hou     NE      NE
4       5       Jax     Jax     NYG     NYG     NYG

и Dataframe с отображением, что-то вроде этого:

Index  TEAM_YH  TeamID
0      ARI       1
1      ATL       2
2      BAL       3
...
31     WAS       32

Я хочу заменить каждую строку на TeamID для создания базовой статистики (частоты), я попробовал следующее:

## Dataframe with strings and Team ID
dfDicTeams = dfTeams[['TEAM_YH','TeamID']].to_dict('dict')

## Dataframe with selections by users
dfW1.replace(dfDicTeams[['TEAM_YH']],dfDicTeams[['TeamID']]) ## Error: unhashable type: 'list'

dfW1.replace(dfDicTeams) ## Error: Replacement not allowed with overlapping keys and values

что я делаю неправильно?это возможно сделать?

Я использую Python 3, и я хочу что-то вроде этого:

Index   IDMatch Usr1    Usr2    Usr3    Usr4    Usr5
0       1       26      2       26      26      26
1       2       3       3       3       4       3
2       3       14      14      7       7       14
3       4       21      21      13      21      21
4       5       15      15      23      23      23

для агрегирования параметров:

IDMatch ATeam Count HTeam Count
1       26      4   2       1
2       3       4   4       1
3       14      3   7       2
4       21      4   13      1
5       15      2   23      3

1 Ответ

0 голосов
/ 13 октября 2018

При наличии основного входного фрейма данных df и фрейма данных отображения df_map вы можете создать отображение серии, а затем использовать pd.DataFrame.applymap с пользовательской функцией:

s = df_map.set_index('TEAM_YH')['TeamID']
df.iloc[:, 2:] = df.iloc[:, 2:].applymap(lambda x: s.get(x.upper(), -1))

print(df)

   Index  IDMatch  Usr1  Usr2  Usr3  Usr4  Usr5
0      0        1     7     2     7     7     7
1      1        2     3     3     3     4     3
2      2        3     5     5    -1    -1     5
3      3        4    -1    -1    -1    -1    -1
4      4        5     6     6    -1    -1    -1

Пример df_map, использованный для вычисления вышеуказанного результата:

Index  TEAM_YH  TeamID
0      ARI       1
1      ATL       2
2      BAL       3
3      BUF       4
4      IND       5
5      JAX       6
6      PHI       7
32     WAS       32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...