繁体   English   中英

将一些行转置为列pandas

[英]Transpose some rows to columns 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

谁能帮我这个? 提前致谢!

使用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

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM