python-使用多列进行熔化/重塑

python-使用多列进行熔化/重塑,python,pandas,Python,Pandas,我以前做过这个,但只有一个专栏。如何在多个柱上重塑或熔化?我认为这不一定是重塑或融化,因为我只是复制一行,然后在h和v列中切换值。我的想法是使用df.iterrows()来实现这一点,但是对于一个大数据集,我认为有更好的方法来实现这一点,只是不确定如何实现。我试着从: 编辑:在…之间有多个列 gid h seas ... v 1 ATL 2000 ... SF 2 CLE 2000 ... JAC 3 DAL 2

我以前做过这个,但只有一个专栏。如何在多个柱上重塑或熔化?我认为这不一定是重塑或融化,因为我只是复制一行,然后在
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
... ...     ...     ...    ...      ...   ...
... ...     ...     ...    ...
用于所有不带以下参数的
h
v
的列:

然后通过交换索引值来更改排序方式并在团队之间交换值:

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
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