使用stack()将3列转换为2列

2024-07-07 00:04:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我不太了解stack()函数的用法,也不太了解如何以这种特定的方式实现它。事实上,也许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()可以让我更接近我想要的东西,但并不确切。我不知道如何使用列作为参数来计算它。我可以通过数据帧的行进行迭代,但我觉得这可能不是最快、最有效的方法。我只希望最后2列与第一列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

Tags: 数据stack方式sfphiindbufgid
1条回答
网友
1楼 · 发布于 2024-07-07 00:04:47

我认为需要^{}首先,最后双^{}来删除MultiIndex的级别和index的列:

df1 = df.set_index('gid').stack().reset_index(level=1, drop=True).reset_index(name='team')

或者使用^{},但是值没有排序,因此^{}是必需的:

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

相关问题 更多 >