Ich habe zwei Datenrahmen. df1 sieht aus wie -Listenindex Außerhalb des Bereichs Fehler - Pandas
MovieName Actors
lights out Maria Bello
legend Tom Hardy*Emily Browning*Christopher Eccleston*David Thewlis
df2 sieht aus wie -
ActorName Gender
Tom male
Emily female
Christopher male
ich zwei Spalten in df1 hinzufügen möchten ‚female_actors‘ und ‚male_actors‘, die die Anzahl der weiblichen und männlichen Schauspieler in diesem speziellen Film enthält beziehungsweise. Ob ein Schauspieler männlich oder weiblich ist, basiert auf df2.
Hier ist, was ich tue -
def func(actors, gender):
actors = [act.split()[0] for act in actors.split('*')]
n_gender = df2.Gender[df2.Gender==gender][df2.ActorName.isin(actors)].count()
return n_gender
df1['male_actors'] = df1.Actors.apply(lambda x: func(x, 'male'))
df1['female_actors'] = df1.Actors.apply(lambda x: func(x, 'female'))
Dieser Code gibt mir die Liste Indexfehler außerhalb des zulässigen Bereichs.
Bitte beachten Sie, dass -
Wenn bestimmte Namen nicht in gender.csv ist, kann es nicht in der Gesamt zählen. Wenn nur ein Akteur in einem Film vorhanden ist und in gender.csv nicht vorhanden ist, sollte die Anzahl null sein.
Ergebnis sollte -
MovieName Actors male_actors female_actors
lights out Maria Bello 0 0
legend Tom Hardy*Emily Browning*Christopher Eccleston*David Thewlis 2 1
Fühlen Sie sich frei einen anderen Ansatz vorschlagen.
Nur Platz in Ihrem Code, wo eine Liste indiziert wird, ist an der 'act.split() [0]', ist es möglich, dass in einigen Fällen die 'Schauspieler' Feld ist leer? – sirfz
@sirfz Ich habe alle leeren Zeilen entfernt. Es läuft jetzt. Aber was denkst du ist das Problem, dass es nur eine maximale Anzahl von 1 identifiziert, selbst wenn 20 Schauspieler erwähnt werden. Liest es automatisch nur eine bestimmte Zeilenlänge? – ComplexData