我有两只熊猫DataFrames:
第一个表Artist-Name DataFrame对IMDb上的每个参与者都有一个惟一的标识符,并具有相应的参与者名称。
第二个表Movie-Cast DataFrame对IMDb上的每部电影和对应电影的前7位付费演员都有一个唯一的标识符(艺术家代码对应于第一个表中演员的唯一标识符)。
我想创建一个新的演员-电影DataFrame,它将艺术家的名字作为第一列,后续的列是所有的演员已经出现的电影。因此,我想使用表1中的"nconst“搜索表2中的每个电影的"principalCast”列,如果演员出现在"principalCast“位置之一(1-7),则将演员出现的电影标题作为列添加到新的演员-电影DataFrame中。最终,我希望有一个包含许多列的表,其中包含艺术家参与的所有电影。
我尝试过合并和旋转DataFrames,但没有成功。我还尝试使用带有两个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行,演员数据库>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没有特定的电影顺序,只需要一个演员参与的电影数据库。
发布于 2018-01-10 03:05:58
这是我会怎么做的。
inplace=True)
如果对我们刚获得的每个列名进行column.startswith('principalCast')
对于cast_columns中的cast_column : actor_names = actor_names.merge(movie_cast,how='left',left_on='nconst',right_on=cast_column) valid_columns = actor_names.columns中的列如果( ('nconst','primaryName')中的列或column.startswith(‘originalTitle’)中的列) actor_names =nconst
发布于 2018-01-09 19:35:19
我没有测试它,但我猜是这样的:
pd.merge(actor_names, movie_cast,how='left',left_on=['nconst'], right_on = ['principalCast1','principalCast2',.....])https://stackoverflow.com/questions/48167040
复制相似问题