基于列前缀重塑数据帧

2024-10-02 16:35:03 发布

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

我有一个csv文件,我读入一个数据帧,如下所示

    Time  AP1  AQ1  AP2  AQ2  AP3  AQ3  AP4  AQ4  AP5  AQ5
0   2000  100   10  300   30  500   50  700   70  900   90
1   2001  105   15  305   35  505   55  705   75  905   95
2   2002  110   20  310   40  510   60  710   80  910  100
3   2003  115   25  315   45  515   65  715   85  915  105
4   2004  120   30  320   50  520   70  720   90  920  110
5   2005  125   35  325   55  525   75  725   95  925  115

如何在不使用循环的情况下重塑数据帧,使我只有Time、AP和AQ列

    Time  AP    AQ
0   2000  100   10
0   2000  300   30
0   2000  500   50  
0   2000  700   70
0   2000  900   90
1   2001  105   15
....

谢谢你提前给我的建议


Tags: 文件csv数据timeapaqap1ap3
1条回答
网友
1楼 · 发布于 2024-10-02 16:35:03

您可以使用^{}设置APAQ作为stubnames

(pd.wide_to_long(df, stubnames=['AP','AQ'], i='Time', j='j')
   .droplevel(1).reset_index())

    Time   AP   AQ
0   2000  100   10
1   2001  105   15
2   2002  110   20
3   2003  115   25
4   2004  120   30
5   2005  125   35
6   2000  300   30
7   2001  305   35
8   2002  310   40
9   2003  315   45
10  2004  320   50
11  2005  325   55
12  2000  500   50
13  2001  505   55
14  2002  510   60
15  2003  515   65

更新

对于具有重复项的Time列,可以执行以下操作:

(pd.wide_to_long(df.reset_index(), stubnames=['AP','AQ'], i='index', j='j')
  .reset_index(drop=True))

    Time  AP   AQ
0   2000  100   10
1   2000  105   15
2   2002  110   20
3   2003  115   25
4   2004  120   30
5   2005  125   35
6   2000  300   30
7   2000  305   35
8   2002  310   40
9   2003  315   45
10  2004  320   50
11  2005  325   55
12  2000  500   50

相关问题 更多 >