gpt4 book ai didi

python - 通过搜索两个数据框创建 pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:18 26 4
gpt4 key购买 nike

我有两个 pandas DataFrame:

第一个表,Artist-Name DataFrame ,对于 IMDb 上的每个 Actor 都有一个唯一的标识符,以及相应的 Actor 名字。

第二个表,Movie-Cast DataFrame ,对于 IMDb 上的每部电影以及相应电影的前 7 位付费 Actor 都有一个唯一标识符(艺术家代码对应于第一个表中 Actor 的唯一标识符)。

我想创建一个新的 Actor 电影数据框,它将艺术家的名字作为第一列,后续的列是 Actor 出现过的所有电影。所以我想使用来自的“nconst”表 1 搜索表 2 中每部电影的每个“principalCast”列,如果 Actor 出现在“principalCast”位置之一(1-7),则将该 Actor 出现的电影标题添加到新 Actor 中 -电影数据帧作为一列。最终,我想要一张有很多列的表格,其中包含艺术家参与过的所有电影。

我尝试合并和旋转数据帧,但没有成功。我还尝试使用 itertuples 和两个 for 循环:

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 行, Actor 数据库>800 万行)。然而,上面的代码是我运行时的错误逻辑。

是否有一种有效的方法来创建新的 DataFrame,即使用表 1 的唯一参与者标识符来搜索表 2 中的每个“principalCast”(1-7)?我想要的输出是:

**primaryName     | nconst    |   movie 1    |   movie 2  | ... | movie n**

Brad Pitt | nm0000015 | Fight Club | Seven | ... | Mr&Mrs Smith

Jennifer Lawrence | nm0000109 | Mother |Hunger Games| ... | Serena

电影没有特定的顺序,只需要一个包含 Actor 参与的电影的数据库即可。

最佳答案

这是我的做法。

  1. 从第一个数据框中删除不相关的列:

    actor_names.drop(['birthYear', 'deathYear'], axis=1, inplace=True)
  2. 从第二个数据帧中获取参与者的列名称:

    cast_columns = [column
    for column in movie_cast.columns
    if column.startswith('principalCast')]
  3. 对我们刚刚获得的每个列名称运行合并,并仅保留我们需要的列:

    for cast_column in cast_columns:
    actor_names = actor_names.merge(movie_cast,
    how='left',
    left_on='nconst',
    right_on=cast_column)
    valid_columns = [column
    for column in actor_names.columns
    if (column in ('nconst', 'primaryName')
    or column.startswith('originalTitle'))]
    actor_names = actor_names[valid_columns]

关于python - 通过搜索两个数据框创建 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167040/

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