【发布时间】:2018-01-10 03:05:58
【问题描述】:
我有两个熊猫数据框:
第一个表Artist-Name DataFrame 为IMDb 上的每个演员都有一个唯一标识符,并带有相应的演员名称。
第二个表Movie-Cast DataFrame 为 IMDb 上的每部电影以及相应电影的前 7 名演员/女演员提供唯一标识符(艺术家代码对应于第一个表中演员的唯一标识符)。
我想创建一个新的 Actor-Movie DataFrame,它将艺术家的名字作为第一列,随后的列是演员出现过的所有电影。所以我想使用来自的“nconst”表 1 为表 2 中的每部电影搜索每个“principalCast”列,如果演员出现在“principalCast”位置之一(1-7),则将演员出现的电影标题添加到新的 Actor-电影数据帧作为一列。最终,我想要一张有很多列的表格,其中包含艺术家参与的所有电影。
我尝试合并和旋转 DataFrame,但没有成功。我也尝试过使用带有两个 for 循环的 itertuples:
for row in actor_names.itertuples():
ldic = []
for r in movie_cast.itertuples():
if row[1] in [r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10]]:
ldic.append({row[1]:[].append(r[2])})
itertuples 需要几个小时并且不会产生任何结果(我的整个电影数据库超过 2000 行,演员数据库超过 800 万行)。但是,上面的代码是我操作的错误逻辑。
有没有一种有效的方法通过使用表 1 的唯一参与者标识符来搜索表 2 中的每个“principalCast”(1-7)来创建新的 DataFrame?我想要的输出是:
**primaryName | nconst | movie 1 | movie 2 | ... | movie n**
Brad Pitt | nm0000015 | Fight Club | Seven | ... | Mr&Mrs Smith
Jennifer Lawrence | nm0000109 | Mother |Hunger Games| ... | Serena
电影没有特定的顺序,只需要一个包含演员参演电影的数据库。
【问题讨论】: