Python - расплавить / изменить, используя несколько столбцов - PullRequest
0 голосов
/ 28 августа 2018

Я использовал melt, чтобы сделать это раньше, но только один столбец. Как вы идете по поводу изменения формы или плавления на нескольких столбцах? Я думаю, что это не обязательно изменить или расплавить, так как я просто дублирую строку, затем переключаю значения в столбцах h и v. Моя мысль состоит в том, чтобы использовать df.iterrows(), чтобы сделать это, но с большим набором данных, думая, что есть лучший способ сделать это, просто не знаю, как. Я пытаюсь перейти от:

РЕДАКТИРОВАТЬ: Есть несколько столбцов между ...

gid   h     seas    ...    v
1     ATL   2000    ...    SF
2     CLE   2000    ...    JAC
3     DAL   2000    ...    PHI
4     GB    2000    ...    NYJ
...   ...   ...     ...    ...
7000  GB    2018    ...    CHI
...   ...   ...     ...    ...

в это:

gid team    seas    ...    opp_team ...   home_away
1   ATL     2000    ...    SF       ...   Home
1   SF      2000    ...    ATL      ...   Away
2   CLE     2000    ...    JAC      ...   Home
2   JAC     2000    ...    CLE      ...   Away
3   DAL     2000    ...    PHI      ...   Home
3   PHI     2000    ...    DAL      ...   Away
4   GB      2000    ...    NYJ      ...   Home
4   NYJ     2000    ...    GB       ...   Away
... ...     ...     ...    ...      ...   ...
... ...     ...     ...    ...

1 Ответ

0 голосов
/ 28 августа 2018

Используйте difference для всех столбцов без h и v для параметра id_vars из melt:

cols = df.columns.difference(['h','v'])
df = df.melt(id_vars=cols, 
             value_vars=['h','v'], 
             var_name='home_away',
             value_name='team')

Затем измените порядок на sort_values и поменяйте местами значения между командами, выбрав их путем замены значений индекса:

df = df.sort_values('gid').reset_index(drop=True)
idx = [i for y, x in zip(df.index[::2], df.index[1::2]) for i in (x, y)]
#alternative non loop solution
#idx = np.vstack([df.index[1::2], df.index[::2]]).T.ravel()

df['opp_team'] = df.loc[idx, 'team'].values
print (df)
   gid  seas home_away team opp_team
0    1  2000         h  ATL       SF
1    1  2000         v   SF      ATL
2    2  2000         h  CLE      JAC
3    2  2000         v  JAC      CLE
4    3  2000         h  DAL      PHI
5    3  2000         v  PHI      DAL
6    4  2000         h   GB      NYJ
7    4  2000         v  NYJ       GB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...