0

I have text file organized in columns, I imported and I have the following:

import pandas as pd
file= ("E:\SkyDrive\A Files\A Files\LACVI\Datos LABSYS\TEST.txt")
df = pd.read_csv(file, sep=';', dtype='str')
df
    Fecha   Prot    Afil    Par Nombre  Codigo  Descrip Cantidad    Valor
0   09/03/2021  A214935 500636234809    00  GOMEZ NOEMI CARMEN  660192  CREATININA. ORINA O SANGRE  1   2
1   09/03/2021  A214935 500636234809    00  GOMEZ NOEMI CARMEN  660412  GLUCEMIA    1   1.5
2   09/03/2021  A214935 500636234809    00  GOMEZ NOEMI CARMEN  660475  HEMOGRAMA   1   3
3   09/03/2021  A214935 500636234809    00  GOMEZ NOEMI CARMEN  660481  HEPATOGRAMA COMPLETO    1   5
4   09/03/2021  A214935 500636234809    00  GOMEZ NOEMI CARMEN  660546  IONOGRAMA PLASMATICO    1   3.5
5   09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660475  HEMOGRAMA   1   3
6   09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660546  IONOGRAMA PLASMATICO    1   3.5
7   09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660711  ORINA COMPLETA  1   2.5
8   09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660865  TIROTROFINA SERICA (TSH)    1   9
9   09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660867  TIROXINA EFECTIVA - T4 - LIBRE  1   0
10  09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660902  UREMIA  1   1.5
11  09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660904  URICO. ACIDO - SERICO.  1   1.5
12  09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    660938  VITAMINA B12    1   15
13  09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    661070  HEMOGLOBINA GLICOSILADA 1   15
14  09/03/2021  A215217 150408411800    00  PEREZ CONCEPCION    662734  ANTIGENO PROSTATICO ESPECIFICO. LIBRE+TOTAL (P...   1   36
15  09/03/2021  A215218 150663233801    00  VERAZ ELVIRA    660192  CREATININA. ORINA O SANGRE  1   2
16  09/03/2021  A215218 150663233801    00  VERAZ ELVIRA    660272  DOMICILIO EN RADIO URBANO - HASTA DOS (2) KMS.  50  4
17  09/03/2021  A215231 150382664902    99  TKOELOLLE MAURICIO PRUDENCIO    660475  HEMOGRAMA   1   3
18  09/03/2021  A215231 150382664902    99  TKOELOLLE MAURICIO PRUDENCIO    660746  PLAQUETAS. RECUENTO DE  1   1
19  09/03/2021  A215232 150000814909    16  ACERTLAR LORENZO    660297  ERITROSEDIMENTACION 1   1
20  09/03/2021  A215232 150000814909    16  ACERTLAR LORENZO    660343  FERREMIA    1   2
21  09/03/2021  A215232 150000814909    16  ACERTLAR LORENZO    660475  HEMOGRAMA   1   3

I need to iterate by row to get the info I put together, so I define the following functions:

def resume_fila(fila):
  return ("AMBULATORIO"
  +'\n'
  "REL 1"
  +'\n' 
  +"El {}; {} tiene {} {}, 1".format(fila.Afil, fila.Nombre, fila.Codigo, fila.Cantidad)
  )

def resume_fila2(fila):
  return ("REL 2"
  +'\n'
  +"El {}; {} tiene {} {}, 2".format(fila.Afil, fila.Nombre, fila.Codigo, fila.Cantidad)
  +'\n'
  +"FIN AMBULATORIO")

The result is similar to what I was looking for :

AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660475 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660475 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660546 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660546 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660711 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660711 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660865 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660865 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660867 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660867 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660902 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660902 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660904 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660904 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 660938 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 660938 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 661070 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 661070 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150408411800; PEREZ CONCEPCION tiene 662734 1, 1
REL 2
El 150408411800; PEREZ CONCEPCION tiene 662734 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150663233801; VERAZ ELVIRA tiene 660192 1, 1
REL 2
El 150663233801; VERAZ ELVIRA tiene 660192 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150663233801; VERAZ ELVIRA tiene 660272 50, 1
REL 2
El 150663233801; VERAZ ELVIRA tiene 660272 50, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150382664902; TKOELOLLE MAURICIO PRUDENCIO tiene 660475 1, 1
REL 2
El 150382664902; TKOELOLLE MAURICIO PRUDENCIO tiene 660475 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150382664902; TKOELOLLE MAURICIO PRUDENCIO tiene 660746 1, 1
REL 2
El 150382664902; TKOELOLLE MAURICIO PRUDENCIO tiene 660746 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150000814909; ACERTLAR LORENZO tiene 660297 1, 1
REL 2
El 150000814909; ACERTLAR LORENZO tiene 660297 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150000814909; ACERTLAR LORENZO tiene 660343 1, 1
REL 2
El 150000814909; ACERTLAR LORENZO tiene 660343 1, 2
FIN AMBULATORIO
AMBULATORIO
REL 1
El 150000814909; ACERTLAR LORENZO tiene 660475 1, 1
REL 2
El 150000814909; ACERTLAR LORENZO tiene 660475 1, 2
FIN AMBULATORIO

But I need that all withing the same group of "Prot" are all together, like:

AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 2
FIN AMBULATORIO

For each group of the 'Prot'.

I do not know if I was clear enough. Thanks!

SOLUTION

After importing the file, I've created the groups and defined the functions for the result of iterating the lines:

gb = df.groupby(['Prot'])

  def resume_fila(fila):
      return ("El {}; {} tiene {} {}, 1".format(fila.Afil, fila.Nombre, fila.Codigo, fila.Cantidad))

  def resume_fila2(fila):
    return ("El {}; {} tiene {} {}, 2".format(fila.Afil, fila.Nombre, fila.Codigo, fila.Cantidad))

The iteration with the titles I need follows:

for k, gp in gb:
  print('AMBULATORIO' + '\n' + 'REL 1')
  for idx, fila in gp.iterrows():
    print(resume_fila(fila))
  
  print('REL 2')  
  for idx, fila in gp.iterrows():
    
    print(resume_fila2(fila))
    
  print('FIN AMBULATORIO')

The results are:

AMBULATORIO
REL 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 1
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 1
REL 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660192 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660412 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660475 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660481 1, 2
El 500636234809; GOMEZ NOEMI CARMEN tiene 660546 1, 2
FIN AMBULATORIO

for each of the groups

Hope this helps to someone with the same problem.

0 Answers0