transpose
可以通过所有列的第一行然后只有所有列的第二行来转换数据,而不是通过所有行的第一列然后只有所有行的第二列吗?
表示需要将列转换为行,所有相同的数据可以在一个组中。
原始数据:
columnA columnB columnC columnD columnE ...
IdA a b c d
IdB 5 6 7 8
IdC e f g h
IdD 4 5 6 7
transpose = pd.melt(id_vars = ['columnA']
,var_name = ['header']
,value_name = 'info')
输出:
columnA header info
IdA columnB a
IdB columnB 5
IdC columnB e
IdD columnB 4
IdA columnC b
IdB columnC 6
IdC columnC f
IdD columnC 5
...
预期输出:
columnA header info
IdA columnB a
IdA columnC b
IdA columnD c
IdA columnE d
IdB columnB 5
IdB columnC 6
IdB columnD 7
IdB columnE 8
...
您将需要使用stack
:
out = (df.set_index('columnA').rename_axis(columns='header')
.stack(dropna=False).reset_index(name='info')
)
NB。默认情况下,stack
删除NaN值,要保留NaN值,请使用dropna=False
参数。
输出:
columnA header info
0 IdA columnB a
1 IdA columnC b
2 IdA columnD c
3 IdA columnE d
4 IdB columnB 5
5 IdB columnC 6
6 IdB columnD 7
7 IdB columnE 8
8 IdC columnB e
9 IdC columnC f
10 IdC columnD g
11 IdC columnE h
12 IdD columnB 4
13 IdD columnC 5
14 IdD columnD 6
15 IdD columnE 7