Цикл с использованием Pandas Python - PullRequest
0 голосов
/ 24 мая 2018

Ниже приведен набор данных

enter image description here. Цель состоит в том, чтобы выбрать идентификатор песни по крайней мере с 1 композитором и 1 издателем по крайней мере в одной строке.Например, у songid 4 есть 2 строки с 2 разными композиторами, но нет издателя, а у песни id 1 нет композитора.Цель состоит в том, чтобы отклонить такие листы Excel, используя Python (панды). Любые предложения?

import pandas as pd
import numpy as np
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

df_header = pd.read_csv('New York Yankees Twins at Yankees-FNG-042318.csv',header=None,skiprows=1)
cuesheetprepareremail = df_header.iloc[0,7]
print(cuesheetprepareremail)


df = pd.read_csv('New York Yankees Twins at Yankees-FNG-042318.csv',
                 names=['CUE','SONG TITLE','USAGE','RUNNING TIME','COMPOSER','COMPOSER PRO','COMPOSER % SHARE','PUBLISHER',' PUBLISHER PRO','PUBLISHER % SHARE' ,'TRACK ID','LIBRARY','ARTIST','START TIME'
],skiprows=7)

#select all rows with same cue number
columns = ['CUE','COMPOSER','PUBLISHER']
df1 = pd.DataFrame(df,columns=columns)

df1 = df1.replace('', np.NaN)
gp = df1.groupby('CUE').count()
fileToSend = 'New York Yankees Twins at Yankees-FNG-042318.csv'
emailfrom = ''
emailto = 'xyz@abc.com'
username= ''
password = ''

msg = MIMEMultipart()
msg['Subject'] = 'Enco error testing'

msg['From'] = emailfrom
msg['To'] = emailto
msg.preamble = 'Enco error testing'

if gp[(gp['COMPOSER'] == 0) | (gp['PUBLISHER'] == 0)] :

    # Send the email via our own SMTP server.
    server = smtplib.SMTP('localhost')
    server.starttls()
    server.login(username,password)
    server.sendmail(emailfrom, emailto, msg.as_string())
    server.quit()

1 Ответ

0 голосов
/ 24 мая 2018

Учитывая ваше DataFrame df

   Song_Id        SONG TITLE *USAGE RUNNING COMPOSER(s)  COMPOSE PUBLISHER(s)
0        1    Testing Moment    BGI                        ASCAP        audio
1        2  Rented Dreams-JP    BGI              Andrew  ABRAMUS         Nova
2        2                                         Paul      UBC             
3        2                                        Molly      UBC             
4        3     Gridiron Rock    BGI               Brian    ASCAP       Client
5        3                                       Daniel    ASCAP             
6        4          Rock Run    BGI             Sharron    ASCAP             
7        4                                   Kyle Towns    ASCAP           

Вам следует заполнить пустые строки с помощью np.NaN, а затем вы можете использовать groupby + count и применить свою логику к сгруппированнымобъект.

import numpy as np

df = df.replace('', np.NaN)
gp = df.groupby('Song_Id').count()

gp[(gp['COMPOSER(s)'] > 0) & (gp['PUBLISHER(s)'] > 0)]
#         *USAGE  COMPOSE  COMPOSER(s)  PUBLISHER(s)  RUNNING  SONG TITLE
#Song_Id                                                                 
#2             1        3            3             1        0           1
#3             1        2            2             1        0           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...