我在Python中有一个数据框,其中包含演员和演员参加的电影的名称。
类似的东西:
Name Films
Adam tt2488496,tt7653254,tt7653254,tt2488496
Jhon tt1596363,tt1386588,tt6266538
Juan tt7653254,tt2488496
我需要为参加的每部电影分开演员。
就像那样:
Name Films
Adam tt2488496
Adam tt7653254
Adam tt7653254
Adam tt2488496
我该怎么办?
另一种方法是通过使用熊猫melt function,如下所示:
# split the films column to many columns
df2 = df['films'].str.split(expand = True)
现在df2是
0 1 2 3
0 tt2488496 tt7653254 tt7653254 tt2488496
1 tt1596363 tt1386588 tt6266538 None
2 tt7653254 tt2488496 None None
使用“名称”列加入这些拆分列
df3= pd.concat([df['Names'], df2], axis = 1)
Names 0 1 2 3
0 Adam tt2488496 tt7653254 tt7653254 tt2488496
1 John tt1596363 tt1386588 tt6266538 None
2 John tt7653254 tt2488496 None None
使用大熊猫融化来旋转并放置不必要的列和Nans'
final_result = pd.melt(df3, id_vars = ['Names'], value_vars = list(df2.columns)).drop(columns = ['variable']).dropna()
是
Names value
0 Adam tt2488496
1 John tt1596363
2 John tt7653254
3 Adam tt7653254
4 John tt1386588
5 John tt2488496
6 Adam tt7653254
7 John tt6266538
9 Adam tt2488496
您可以这样操作:
df = pd.DataFrame(df.Films.str.split(',').tolist(), index=df.Name).stack().reset_index()[['Name',0]]
df.columns = ['Name', 'Films']
Name Films
0 Adam tt2488496
1 Adam tt7653254
2 Adam tt7653254
3 Adam tt2488496
4 Jhon tt1596363
5 Jhon tt1386588
6 Jhon tt6266538
7 Juan tt7653254
8 Juan tt2488496