根据列前缀重塑数据框

时间:2019-03-19 15:28:18

标签: python pandas

我有一个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

如何在不使用循环的情况下重新塑形数据框,使我只有时间,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
....

非常感谢您提供任何建议。

1 个答案:

答案 0 :(得分:4)

您可以使用pd.wide_to_longAPAQ设置为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