如何将水平数据帧结构转换为垂直python
我有一个脚本,它读取一个.xlsx文件并创建一个如下所示的数据帧如何将水平数据帧结构转换为垂直python,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个脚本,它读取一个.xlsx文件并创建一个如下所示的数据帧 index|TASK|CODE|NAME|WT|ST|ORIGIN|SRV|DESTINY|FT|MCLINE|ST.1|ORIGIN.1|SRV.1|DESTINY.1|FT.1|MCLINE.1 这可能会更长,具体取决于excel文件的列,只需重复字段ST.(n),ORIGIN.(n),SRV.(n),DESTINY.(n),FT.(n),MCLINE.(n)) 比如说 指数 任务 代码 名称 WT 装货单 起源 SRV 命
index|TASK|CODE|NAME|WT|ST|ORIGIN|SRV|DESTINY|FT|MCLINE|ST.1|ORIGIN.1|SRV.1|DESTINY.1|FT.1|MCLINE.1
这可能会更长,具体取决于excel文件的列,只需重复字段ST.(n)
,ORIGIN.(n)
,SRV.(n)
,DESTINY.(n)
,FT.(n)
,MCLINE.(n))
比如说
指数
任务
代码
名称
WT
装货单
起源
SRV
命运
英尺
麦克林
圣1
来源:1
SRV.1
命运1
FT.1
MCLINE.1
圣2
来源2
SRV.2
命运2
英尺2
麦克林
0
61P00QH
12900
克劳奇,彼得
06:14
14:46
帕特科尔
61P004T
帕特科尔
16:06
Etap 1-R*G0431
1.
61P00CH
10900
兰帕德,弗兰克
07:13
06:20
帕特科尔
61P00CT
帕特科尔
09:53
Etap 1-R*D0431
10:33
帕特科尔
61P00CT
帕特科尔
14:13
Etapa 1-R*D0431
2.
5SE00DH
18049
杰拉德,史蒂文
07:30
11:55
大站
5SE005O
大站
16:01
格兰德车站0290/CopaD0291
16:41
大站
5SE003O
大站
17:37
不
17:41
大站
5SE009O
帕特·奥达
19:55
格兰德车站0290/CopaD0291
这是熊猫的典型例子。从宽到长。但是我们首先需要做一些调整,因为这个函数需要在相同的模式下命名所有相似的列,即
。我们开始:
import pandas as pd
# import your data into a dataframe df
common_cols = ['ST', 'ORIGIN', 'SRV', 'DESTINY', 'FT', 'MCLINE']
df = df.rename({col: col + '.0' for col in common_cols}, axis=1)
_df = (pd.wide_to_long(df, stubnames=common_cols,
i=['TASK', 'CODE', 'NAME', 'WT'],
j='n',
suffix=r'\.\d*')
.reset_index()
.drop('n', axis=1)
.dropna())
结果如下:
TASK CODE NAME WT ST ORIGIN SRV DESTINY FT MCLINE
0 61P00QH 12900 CROUCH,PETER 06:14 14:46 PatCol 61P004T PatCol 16:06 Etap1-R*G0431
3 61P00CH 10900 LAMPARD,FRANK 07:13 06:20 PatCol 61P00CT PatCol 09:53 Etap1-R*D0431
4 61P00CH 10900 LAMPARD,FRANK 07:13 10:33 PatCol 61P00CT PatCol 14:13 Etapa1-R*D0431
6 5SE00DH 18049 GERRARD,STEVEN 07:30 11:55 GrandStation 5SE005O GrandStation 16:01 Grandstation*D0290/Copa*D0291
7 5SE00DH 18049 GERRARD,STEVEN 07:30 16:41 GrandStation 5SE003O GrandStation 17:37 No
8 5SE00DH 18049 GERRARD,STEVEN 07:30 17:41 GrandStation 5SE009O PatOda 19:55 GrandStation*D0290/Copa*D0291
“n”能有多大?或者你需要为任何价值做好准备?我需要为任何价值做好准备。好的,到目前为止你试过什么吗?我试着用这个,但我不知道怎么做。df.replace(“”,np.nan)。set_index(['CODE','NAME'])。stack()。reset_index(NAME='H.ini')。drop('level_1',1)