将一些行转置为列pandas

时间:2018-02-14 14:11:42

标签: python python-2.7 pandas

我正在使用pandas(python)并且有一个数据框,我希望保留一些列,并将一些列转换为行,以减少列数,也不会丢失列中的数据。例如,以下是我的数据框:

ID  Name  Gender       R1      R2      R3      R4      R5     R6
-------------------------------------------------------------------
01  Abc     M          A1      A2      B3      B1      D2     A3
02  Cde     F          A2      B1      B2      D1      C2     C3

我希望保留ID,名称和性别,并将R列转换为行,例如:

ID  Name Gender  R  R_no
------------------------
01  Abc     M    A1  1
01  Abc     M    A2  2
01  Abc     M    B3  3
01  Abc     M    B1  4
01  Abc     M    D2  5
01  Abc     M    A3  6
02  Cde     F    A2  1
02  Cde     F    B1  2
02  Cde     F    B2  3
02  Cde     F    D1  4
02  Cde     F    C2  5
02  Cde     F    C3  6

任何人都可以帮我吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

使用stack

df = df.set_index(['ID','Name','Gender'])
df.columns = df.columns.str.extract('(\d+)', expand=False)
df = df.stack().reset_index(name='R').rename(columns={'level_3':'R_no'})
print (df)
    ID Name Gender R_no   R
0    1  Abc      M    1  A1
1    1  Abc      M    2  A2
2    1  Abc      M    3  B3
3    1  Abc      M    4  B1
4    1  Abc      M    5  D2
5    1  Abc      M    6  A3
6    2  Cde      F    1  A2
7    2  Cde      F    2  B1
8    2  Cde      F    3  B2
9    2  Cde      F    4  D1
10   2  Cde      F    5  C2
11   2  Cde      F    6  C3

答案 1 :(得分:0)

使用pd.wide_to_long

In [206]: pd.wide_to_long(df,stubnames='R',i=['ID','Name','Gender'],j='R_no').reset_index()
Out[206]:
    ID Name Gender  R_no   R
0    1  Abc      M     1  A1
1    1  Abc      M     2  A2
2    1  Abc      M     3  B3
3    1  Abc      M     4  B1
4    1  Abc      M     5  D2
5    1  Abc      M     6  A3
6    2  Cde      F     1  A2
7    2  Cde      F     2  B1
8    2  Cde      F     3  B2
9    2  Cde      F     4  D1
10   2  Cde      F     5  C2
11   2  Cde      F     6  C3