[英]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
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.