让我说:
样本输入文件如下:
对于这四列,我首先需要找出具有最大\ 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