Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按特定列对来自dataframe的结果进行分组_Python_Pandas_Dataframe_Loops - Fatal编程技术网

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