cómo filtrar un objeto DF groupby a una lista
Estoy filtrando un dataframe y enviando los resultados de la información en un correo electrónico usando smtplib. Esto es lo que tengo hasta ahora.
“`Python
def SMTP_Emailer(content, receiver):
msg = EmailMessage()
msg[‘Subject’] = “¡Correo de prueba!”
msg[‘From’] = ‘test@example.com’
msg[‘To’] = [receiver]
msg.set_content( f"""Este es un correo de prueba, favor de ignorar{content}""", subtype='html')
with smtplib.SMTP('sendsmtp.server.com', 1234) as s:
s.send_message(msg)
Tengo un dataframe de pandas así:
d =
STATE CUSTOMER ORDERS EMAIL OWNER
0 ID Jerry 10 Jerry@example.com
1 MT Tom 119 Jerry@example.com
2 CA Patrick 87 Jerry@example.com
3 WA Lucy 918 Mark@example.com
Luego, agrupo por la serie d[‘EMAIL OWNER’]
grouped = df.groupby(“EMAIL TEST”)
for emails, data in grouped:
print(emails)
dataframes = [emails for e, group in grouped]
print(dataframes)
SMTP_Emailer(data.loc[:, :].to_html(), dataframes)
Espero obtener [‘Jerry@example.com ‘, ‘Mark@example.com ‘] para poder ponerlos en msg[‘To’]
pero inesperadamente obtengo [‘Mark@example.com’,’Mark@example.com’] en VS Code
y en jupyter notebook obtengo:
Mark@example.com
[‘Mark@example.com’, ‘Mark@example.com’]
Jerry@example.com
[‘Jerry@example.com’, ‘Jerry@example.com’]
El resultado esperado es que ocurran 2 correos electrónicos separados. Usé el groupby para filtrar desde la fuente de datos principal (d) por la dirección de correo electrónico de las personas para que solo vean lo que les pertenece y no lo de la otra persona. Entonces, Mark no vería los datos de Jerry (y viceversa).
Avísame si esto ayuda a aclarar las cosas.
Email 1 se envía a Jerry@example.com
Estado CLIENTE PEDIDOS CORREO DEL DUEÑO
0 ID Jerry 10 Jerry@example.com
1 MT Tom 119 Jerry@example.com
2 CA Patrick 87 Jerry@example.com
Email 2 se envía a Mark@example.com
3 WA Lucy 918 Mark@example.com
davy.ai
Solución
El problema parece estar en cómo se define la lista
dataframes
en el buclefor
. En lugar de usar la listadataframes
, puedes usar directamente la variableemails
para actualizar el campoTo
del mensaje de correo electrónico.Aquí tienes el código modificado que debería funcionar:
¡Espero que esto ayude!