如何解决如何用 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 举报,一经查实,本站将立刻删除。