微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用 iterrows 解决熊猫问题

如何解决如何用 iterrows 解决熊猫问题

我自愿帮助一家乡村图书馆处理他们的一些任务。他们想向他们的成员发送消息。有了他们给我的信息,他们希望我稍后展示输出。 他们有以下 .csv 文件(这是一个例子):

import pandas as pd
file= ("biblioteca.csv")
df = pd.read_csv(file,sep=',',dtype='str')
df

内容如下:

    Fecha   Socio   Doc Nombre  Libro   Volumenes   Dias_Vto
0   9/1/2021    1   47890056    Ruben Dario Harry Potter - Espanol  1   28
1   4/2/2021    1   47890056    Ruben Dario Harry Potter - Ingles   1   16
2   3/3/2021    1   47890056    Ruben Dario El pajaro canta hasta morir 1   16
3   1/1/2021    1   47890056    Ruben Dario Criptonomicom   3   35
4   1/2/2021    2   46859754    Ernesto Sabato  Cuentos de la selva 1   6
5   5/3/2021    2   46859754    Ernesto Sabato  Los pajaros 1   12
6   2/2/2021    3   39845712    Jose Sacristan  Vida de un Ausente  1   21
7   2/2/2021    3   39845712    Jose Sacristan  Alter Ego   1   19
8   2/2/2021    3   39845712    Jose Sacristan  Cookbook    5   2

我创建了一些函数,其中包含他们想要发送给成员的信息:

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

def nombre(fila):
    return ("Fecha {} Documento {}".format(fila.Fecha,fila.Doc))

def sucursal(fila):
    return ("Sucursal - Monte Castro")

def libros(fila):
    return ("Don {},retiró el dia {},el libro: {} que consta de {} volumen/es;1;   {}".format(fila.Nombre,fila.Fecha,fila.Libro,fila.Volumenes,fila.Doc))

def vencimiento(fila):
    return ("El libro {} vence dentro de {} dia/s.  {}".format(fila.Libro,fila.Dias_Vto,fila.Doc))

print('Resumen Biblioteca')

for k,gp in gb:

  for idx,fila in gp.iterrows():
    print('Fecha  - Nombre')
    print(nombre(fila))
    print('Sucursal biblioteca')
    print(sucursal(fila))  
    
   

    print('Libros solicitados')
    for idx,fila in gp.iterrows():
        print(libros(fila))
  
    print('Vencimientos')  
    for idx,fila in gp.iterrows():
        print(vencimiento(fila))
    
    print('FIN Socio - Biblioteca Sucursal - Monte Castro')
print('---------')
print()
print()

迭代的问题在于它乘以标题次数与为每一行迭代行的次数一样多。第一个成员 (Socio) 就是这种情况。

Resumen Biblioteca  
Fecha  - Nombre  
Fecha 9/1/2021 Documento 47890056  
Sucursal biblioteca  
Sucursal - Monte Castro  
Libros solicitados  
Don Ruben Dario,retiró el dia 9/1/2021,el libro: Harry Potter - Espanol que consta de 1 volumen/es;1;   47890056  
Don Ruben Dario,retiró el dia 4/2/2021,el libro: Harry Potter - Ingles que consta de 1 volumen/es;1;   47890056  
Don Ruben Dario,retiró el dia 3/3/2021,el libro: El pajaro canta hasta morir que consta de 1 volumen/es;1;   47890056  
Don Ruben Dario,retiró el dia 1/1/2021,el libro: Criptonomicom que consta de 3 volumen/es;1;   47890056  
Vencimientos  
El libro Harry Potter - Espanol vence dentro de 28 dia/s.  47890056  
El libro Harry Potter - Ingles vence dentro de 16 dia/s.  47890056  
El libro El pajaro canta hasta morir vence dentro de 16 dia/s.  47890056  
El libro Criptonomicom vence dentro de 35 dia/s.  47890056  
FIN Socio - Biblioteca Sucursal - Monte Castro  
Fecha  - Nombre  
Fecha 4/2/2021 Documento 47890056  
Sucursal biblioteca  
Sucursal - Monte Castro  
Libros solicitados  
Don Ruben Dario,el libro: Criptonomicom que consta de 3 volumen/es;1;   47890056      
Vencimientos    
El libro Harry Potter - Espanol vence dentro de 28 dia/s.  47890056  
El libro Harry Potter - Ingles vence dentro de 16 dia/s.  47890056  
El libro El pajaro canta hasta morir vence dentro de 16 dia/s.  47890056
El libro Criptonomicom vence dentro de 35 dia/s.  47890056
FIN Socio - Biblioteca Sucursal - Monte Castro

预期输出为:

Resumen Biblioteca  
Fecha  - Nombre  
Fecha 9/1/2021 Documento 47890056  
Sucursal biblioteca  
Sucursal - Monte Castro  
Libros solicitados  
Don Ruben Dario,el libro: Criptonomicom que consta de 3 volumen/es;1;   47890056  
Vencimientos  
El libro Harry Potter - Espanol vence dentro de 28 dia/s.  47890056  
El libro Harry Potter - Ingles vence dentro de 16 dia/s.  47890056  
El libro El pajaro canta hasta morir vence dentro de 16 dia/s.  47890056  
El libro Criptonomicom vence dentro de 35 dia/s.  47890056  
FIN Socio - Biblioteca Sucursal - Monte Castro

对于每个成员 (Socio)。

同样的事情发生在所有成员身上。 感谢您的帮助!!!

解决方法

我认为这应该可以满足您的需求。要记住的事情是不要在第一个循环内第二次迭代 gb。相反,在 fila 上进行第二次迭代。

# Necessary change in order to account for the new for structure
def nombre(fila):
    return "Fecha {} Documento {}".format(fila.Fecha.iloc[0],fila.Doc.iloc[0])

for _,fila in gb:
    print('Fecha  - Nombre')
    print(nombre(fila))
    print('Sucursal biblioteca')
    print(sucursal())  

    print('Libros solicitados')
    for _,fila2 in fila.iterrows():
        print(libros(fila2))
        
    print('Vencimientos')  
    for _,fila2 in fila.iterrows():
        print(vencimiento(fila2))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。