Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

186
Views
clasificar datos de Excel fila por fila en columnas de nivel n

Tengo un problema con el archivo de Excel para clasificar los datos en algunas columnas y filas, necesito organizar las celdas de combinación en la siguiente columna como una fila 1 y la siguiente columna junto a ellas como en estas imágenes:

Aporte:

ejemplo de excel de entrada

Salida para lácteos:

ejemplo de excel de salida

Resumen:

primero tomamos la fila Dairy , luego vamos a la segunda columna frente a Dairy y obtenemos datos frente a Dairy , luego vamos a la segunda columna y frente a Milk to Mr. 1 obtenemos Butter to Mrs. 1 y Butter to Mrs. 2 y así sucesivamente...

Después de eso, queremos exportarlo a un archivo de Excel como en la imagen de salida.

He escrito un código que obtiene los datos de la primera columna y encuentra todos los datos delante de él, pero necesito cambiarlo para obtener los datos fila por fila como en la imagen de salida:

 import pandas import openpyxl import xlwt from xlwt import Workbook df = pandas.read_excel('excel.xlsx') result_first_level = [] for i, item in enumerate(df[df.columns[0]].values, 2): if pandas.isna(item): result_first_level[-1]['index'] = i else: result_first_level.append(dict(name=item, index=i, levels_name=[])) for level in df.columns[1:]: move_index = 0 for i, obj in enumerate(result_first_level): if i == 0: for item in df[level].values[0:obj['index'] - 1]: if pandas.isna(item): move_index += 1 continue else: obj['levels_name'].append(item) move_index += 1 else: for item in df[level].values[move_index:obj['index'] - 1]: if pandas.isna(item): move_index += 1 continue else: obj['levels_name'].append(item) move_index += 1 # Workbook is created wb = Workbook() # add_sheet is used to create sheet. sheet1 = wb.add_sheet('Sheet 1') style = xlwt.easyxf('font: bold 1') move_index = 0 for item in result_first_level: for member in item['levels_name']: sheet1.write(move_index, 0, item['name'], style) sheet1.write(move_index, 1, member) move_index += 1 wb.save('test.xls')

descargue el archivo de entrada Excel desde aquí

¡Gracias por ayudar!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Primero, complete sus datos para completar las celdas en blanco con el último valor válido y cree una colección ordenada usando pd.CategoricalDtype para ordenar la columna del product . Finalmente, solo tiene que iterar sobre las columnas por pares y cambiar el nombre de las columnas para permitir la concatenación. El último paso es ordenar las filas por valor del product .

 import pandas as pd # Prepare your dataframe df = pd.read_excel('input.xlsx').dropna(how='all') df.update(df.iloc[:, :-1].ffill()) df = df.drop_duplicates() # Get keys to sort data in the final output cats = pd.CategoricalDtype(df.T.melt()['value'].dropna().unique(), ordered=True) # Group pairwise values data = [] for cols in zip(df.columns, df.columns[1:]): col_mapping = dict(zip(cols, ['product', 'subproduct'])) data.append(df[list(cols)].rename(columns=col_mapping)) # Merge all data out = pd.concat(data).drop_duplicates().dropna() \ .astype(cats).sort_values('product').reset_index(drop=True)

Producción:

 >>> cats CategoricalDtype(categories=['Dairy', 'Milk to Mr.1', 'Butter to Mrs.1', 'Butter to Mrs.2', 'Cheese to Miss 2 ', 'Cheese to Mr.2', 'Milk to Miss.1', 'Milk to Mr.5', 'yoghurt to Mr.3', 'Milk to Mr.6', 'Fruits', 'Apples to Mr.6', 'Limes to Miss 5', 'Oranges to Mr.7', 'Plumbs to Miss 5', 'apple for mr 2', 'Foods & Drinks', 'Chips to Mr1', 'Jam to Mr 2.', 'Coca to Mr 5', 'Cookies to Mr1.', 'Coca to Mr 7', 'Coca to Mr 6', 'Juice to Miss 1', 'Jam to Mr 3.', 'Ice cream to Miss 3.', 'Honey to Mr 5', 'Cake to Mrs. 2', 'Honey to Miss 2', 'Chewing gum to Miss 7.'], ordered=True) >>> out product subproduct 0 Dairy Milk to Mr.1 1 Dairy Cheese to Mr.2 2 Milk to Mr.1 Butter to Mrs.1 3 Milk to Mr.1 Butter to Mrs.2 4 Butter to Mrs.2 Cheese to Miss 2 5 Cheese to Mr.2 Milk to Miss.1 6 Cheese to Mr.2 yoghurt to Mr.3 7 Milk to Miss.1 Milk to Mr.5 8 yoghurt to Mr.3 Milk to Mr.6 9 Fruits Apples to Mr.6 10 Fruits Oranges to Mr.7 11 Apples to Mr.6 Limes to Miss 5 12 Oranges to Mr.7 Plumbs to Miss 5 13 Plumbs to Miss 5 apple for mr 2 14 Foods & Drinks Chips to Mr1 15 Foods & Drinks Juice to Miss 1 16 Foods & Drinks Cake to Mrs. 2 17 Chips to Mr1 Jam to Mr 2. 18 Chips to Mr1 Cookies to Mr1. 19 Jam to Mr 2. Coca to Mr 5 20 Cookies to Mr1. Coca to Mr 6 21 Cookies to Mr1. Coca to Mr 7 22 Juice to Miss 1 Honey to Mr 5 23 Juice to Miss 1 Jam to Mr 3. 24 Jam to Mr 3. Ice cream to Miss 3. 25 Cake to Mrs. 2 Chewing gum to Miss 7. 26 Cake to Mrs. 2 Honey to Miss 2
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!