这是一种使用.pivot_table() 方法的方法。
首先,您必须使用.apply() 方法将movieCater 列转换为列表。
>>> df
MovieID movieCater rating
0 1 Action, Comedy, Adventure 4
1 2 Action, Crime 3
2 3 Crime 2
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', ')))
MovieID movieCater rating movieCater_list
0 1 Action, Comedy, Adventure 4 [Action, Comedy, Adventure]
1 2 Action, Crime 3 [Action, Crime]
2 3 Crime 2 [Crime]
接下来,在movieCater_list 列上使用.explode() 方法。
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', '))).explode('movieCater_list')
MovieID movieCater rating movieCater_list
0 1 Action, Comedy, Adventure 4 Action
0 1 Action, Comedy, Adventure 4 Comedy
0 1 Action, Comedy, Adventure 4 Adventure
1 2 Action, Crime 3 Action
1 2 Action, Crime 3 Crime
2 3 Crime 2 Crime
终于用.pivot_table()
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', '))).explode('movieCater_list').pivot_table(values='rating', index=['MovieID', 'movieCater'], columns='movieCater_list', fill_value=0)
movieCater_list Action Adventure Comedy Crime
MovieID movieCater
1 Action, Comedy, Adventure 4 4 4 0
2 Action, Crime 3 0 0 3
3 Crime 0 0 0 2