列表索引超出范围错误-熊猫

复杂数据

我有两个数据框。df1看起来像-

MovieName    Actors
lights out   Maria Bello
legend       Tom Hardy*Emily Browning*Christopher Eccleston*David Thewlis

df2看起来像-

ActorName    Gender
Tom          male
Emily        female
Christopher  male

我想在df1“ female_actors”和“ male_actors”中添加两列,分别包含该特定电影中女性和男性演员的数量。根据df2确定演员是男性还是女性。

这是我在做什么-

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'))

此代码给我列表索引超出范围错误。

请注意-

如果gender.csv中没有特定名称,则不要将其计入总数。如果电影中只有一个演员,而在sex.csv中不存在,则其计数应为零。

结果应该是-

MovieName    Actors      male_actors    female_actors
lights out   Maria Bello    0              0
legend       Tom Hardy*Emily Browning*Christopher Eccleston*David Thewlis    2    1

随意提出其他方法。

亚历克斯

这个怎么样?

df1['Male'] = df1.Actors.apply(lambda x: len(pd.concat( [df2[(df2.ActorName == name) & (df2.Gender == 'male')] for name in x.split('*')] )))
df1['Female'] = df1.Actors.apply(lambda x: len(pd.concat( [df2[(df2.ActorName == name) & (df2.Gender == 'female')] for name in x.split('*')] )))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章