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.