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