gpt4 book ai didi

python - 列表索引超出范围错误 - pandas

转载 作者:行者123 更新时间:2023-11-30 22:46:22 25 4
gpt4 key购买 nike

我有两个数据框。 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' 中添加两列,其中分别包含该特定电影中女性和男性 Actor 的数量。 Actor 是男是女是根据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'))

这段代码给了我列表索引超出范围的错误。

请注意 -

如果性别.csv 中不存在特定名称,则不要将其计入总数。如果一部电影中只有一名 Actor ,并且它没有出现在 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('*')] )))

关于python - 列表索引超出范围错误 - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com