Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将水平数据帧结构转换为垂直python_Python_Python 3.x_Pandas - Fatal编程技术网

如何将水平数据帧结构转换为垂直python

如何将水平数据帧结构转换为垂直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 命

我有一个脚本,它读取一个.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 命运 英尺 麦克林 圣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)