我正在使用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
任何人都可以帮我吗?提前谢谢!
答案 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)
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