我不太了解stack()函数的用法或如何以这种特定方式实现它。实际上,也许堆栈甚至不是看待这一点的正确方法。但是我尝试了一下,它使我接近了要寻找的东西。
我正在尝试获取此数据框:
gid v h
4791 ATL PHI
4792 BUF BAL
4793 PIT CLE
4794 CIN IND
4795 TEN MIA
4796 SF MIN
4797 HOU NE
4798 TB NO
4799 JAC NYG
4800 KC LAC
使用df.stack()
使我接近想要的东西,但不完全是。我不确定如何使用列作为参数来解决。我可以按数据框的行进行迭代,但是我觉得这可能不是最快,最有效的方法。我只希望最后两列与第一列gid
重复进行。例如,这是我尝试获得的输出:
gid team
4791 ATL
4791 PHI
4792 BUF
4792 BAL
4793 PIT
4793 CLE
4794 CIN
4794 IND
4795 TEN
4795 MIA
4796 SF
4796 MIN
4797 HOU
4797 NE
4798 TB
4798 NO
4799 JAC
4799 NYG
4800 KC
4800 LAC
答案 0 :(得分:3)
我认为需要set_index
首先,最后两次reset_index
来删除MultiIndex
的级别以及index
中的列:
df1 = df.set_index('gid').stack().reset_index(level=1, drop=True).reset_index(name='team')
或使用melt
,但随后的值未排序,因此sort_values
是必需的:
df1 = (df.melt('gid', value_name='team')
.sort_values('gid')
.drop('variable', axis=1)
.reset_index(drop=True))
print (df1)
gid team
0 4791 ATL
1 4791 PHI
2 4792 BUF
3 4792 BAL
4 4793 PIT
5 4793 CLE
6 4794 CIN
7 4794 IND
8 4795 TEN
9 4795 MIA
10 4796 SF
11 4796 MIN
12 4797 HOU
13 4797 NE
14 4798 TB
15 4798 NO
16 4799 JAC
17 4799 NYG
18 4800 KC
19 4800 LAC