使用熊猫将具有多个值的行拆分为多行

时间:2019-05-07 08:49:58

标签: python pandas

让我说:

  • Src_Column_Name计数为4。
  • Src_Table_Name计数为2。
  • Source_Schema_Directory为1。
  • Src_Data_Type计数为0。

样本输入文件如下:

enter image description here

对于这四列,我首先需要找出具有最大\ n值的列,并在最大计数时间内重复这些行。

在基于最大计数(4)拆分行(\ n)的同时,我们需要为下一行重复源模式目录,源表名称和源数据类型的前一个值。在下面的示例中,如果您观察第3行和第4行,则“源模式”和“源表名称”的最后一个值将重复。对于其余的其他列,我们将对所有4行重复相同的值。对于具有单个值的行,数据应保持原样。我如何在熊猫中实现这一目标。

例如

Row  SOURCE_SCHEMA_DIRECTORY    SRC_TABLE_NAME  SRC_COLUMN_NAME SRC_COLUMN_DATA_TYPE
55   DD                         ACT_CORE_HSTRY  user_area    
55   DD                         ACT_XREF_HSTRY  BANK_ID  
55   DD                         ACT_XREF_HSTRY  ACCOUNT_ID   
55   DD                         ACT_XREF_HSTRY  APPL_CODE   

我尝试过p.repeat和itertools(chain)。它适用于相同长度的列值,但给出ValueError: arrays must all be same length

import pandas as pd
import numpy as np
from numba.tests.npyufunc.test_ufunc import dtype
from itertools import chain

xls =  pd.ExcelFile("H:\\ip.xlsx")
input_df = xls._parse_excel("Table1")

input_df = input_df.replace({r'\s+$': '', r'^\s+': ''}, regex=True)

def chainer(s):
    return list(chain.from_iterable(s.str.split('\n')))

lens = input_df['SRC_COLUMN_NAME'].str.split('\n').map(len)

res = pd.DataFrame({'MAP_DOC_NAME': np.repeat(input_df['MAP_DOC_NAME'], lens),
                    'ROW_NUM': np.repeat(input_df['ROW_NUM'], lens),
                    'SOURCE_SCHEMA_DIRECTORY': np.repeat(input_df['SOURCE_SCHEMA_DIRECTORY'], lens),
                    'SRC_COLUMN_NAME': chainer(input_df['SRC_COLUMN_NAME']),
                    'SRC_TABLE_NAME': chainer(input_df['SRC_TABLE_NAME'])
                    })

print(res)

输出应类似于:

Row    SOURCE_SCHEMA_DIRECTORY  SRC_TABLE_NAME          SRC_COLUMN_NAME SRC_COLUMN_DATA_TYPE
1      DD                       ACCOUNT_CORE_HSTRY      ACCT_CTN_CD     varchar
55     DD                       ACT_CORE_HSTRY          user_area    
55     DD                       ACT_XREF_HSTRY          BANK_ID  
55     DD                       ACT_XREF_HSTRY          ACCOUNT_ID   
55     DD                       ACT_XREF_HSTRY          APPL_CODE

0 个答案:

没有答案