Cog en la máquina:

Los datos contienen datos de los últimos 12 meses y se apilan horizontalmente. Cada mes tiene actualizaciones revisadas y un nuevo mes adjunto.

  ID  |Date        |Month1_a |Month1_b |Month1_c |Month2_a |Month2_b |Month2_c |Month3_a |Month3_b |Month3_c
  ##  |MM/DD/YYYY  |abc      |zxy      |123      |NULL     |zxy      |122      |abc      |zxy      |123

El archivo de datos real no tiene encabezados y se ingiere en sentido descendente como Archivo por mes Archivo mes 1, etc.

ID  | Date       |Month1_a |Month1_b |Month1_c |New Column
##  |MM/DD/YYYY  |abc      |zxy      |123      | #

ID  | Date       |Month2_a  |Month2_b |Month2_c |New Column
##  |MM/DD/YYYY  |NULL      |zxy      |122      | #


Aparte de copiar el archivo 12 veces. ¿Hay alguna sugerencia para leer una vez y recorrer para crear mis salidas? He resuelto la lógica para el mes 1, estoy atascado en cuanto a cómo pasar al mes 2 o más.

Originalmente estaba pensando en Leer archivo> Eliminar mes 3+> Eliminar mes 1> Ejecutar lógica, pero no estoy seguro de si existe una práctica mejor / mejor.

Gracias.

0
scipio1551 26 ago. 2020 a las 02:41

1 respuesta

La mejor respuesta

Esto generará un número n de archivos csv donde n es el número de meses en sus datos de entrada. Con suerte, esto es lo que buscas.

import pandas as pd

df = pd.read_csv('my_data.csv', sep='|')

# Strip whitespace from column names
df.columns = [x.strip() for x in df.columns]

# Get a set of months in the data by splitting on _ and removing 'Month' from
# the first part
months = set([x.split('_')[0].replace('Month','') for x in df.columns if 'Month' in x])

# For each numeric month in months, add those columns with that number in it to
# the ID and Date columns and write to a csv with that month number in the csv title
for month in months:
    base_columns = ['ID','Date']
    base_columns.extend([x for x in df.columns if 'Month'+month in x])
    df[base_columns].to_csv(f'Month_{month}.csv', index=False)
1
Chris 26 ago. 2020 a las 00:03