Python 如何按特定列对来自dataframe的结果进行分组
我有按列组织的文本文件,我导入了以下内容:Python 如何按特定列对来自dataframe的结果进行分组,python,pandas,dataframe,loops,Python,Pandas,Dataframe,Loops,我有按列组织的文本文件,我导入了以下内容: 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/
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
我需要按行进行迭代以获得我放在一起的信息,因此我定义了以下函数:
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")
结果与我想要的结果相似:
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
但我需要的是,所有拥有同一组“Prot”的人都在一起,比如:
救护车关系1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660192 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660412 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660475 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660481,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660546 1,1
关系2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660192 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660412 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660475 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660481,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660546 1,2
鳍状回廊 对于“保护”的每组 我不知道我是否足够清楚。 谢谢 解决方案 导入文件后,我创建了组,并为迭代行的结果定义了函数:
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))
我需要的标题的迭代如下:
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')
结果是:
救护车关系1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660192 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660412 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660475 1,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660481,1
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660546 1,1
关系2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660192 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660412 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660475 1,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660481,2
El 500636234809;戈麦斯·诺埃米·卡门·蒂恩660546 1,2
鳍状回廊 对于每个组
希望这对有同样问题的人有所帮助。请查看
groupby
的文档嗨,Eric,谢谢,我正在与groupby
合作,但我得到了相同的结果。我可能在def
上遇到了问题,但我尝试了什么都没有解决。这个链接可能会有帮助。谢谢Shubham,我正在尝试,我可以根据一个键来分隔组,但是当我尝试打印它们时,结果与我上面写的相同。我在文章的最后回答这个问题。而groupby
有助于解决问题。谢谢@eric truett和@shubham periwal