我有两个数据框。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] 删除。
我来说两句