将 pandas 中的数据帧转换为另一个数据帧
Converting a dataframe in pandas to another one
我已将 https://figshare.com/articles/On_screen_movie_kill_counts_for_hundreds_of_films/889719 中的 csv "Body Count dataset" 作为数据框加载到我的 jupyter 笔记本中。
我的任务是进行线性回归以预测电影的 MPAA 评级。我听说,我的数据向量 X 应该包含列:Body_Count、IsAction、IsThriller 等等...
不幸的是,我不知道如何从我的数据集中获得这些统计数据,因为每种电影类型都被标记为 "thriller|action|drama"。
你知道怎么做吗?
df = pd.DataFrame({'genre': ['action', 'thriller', 'drama'], 'kills':[50,100,150]})
print(df)
dummies = pd.get_dummies(df['genre'])
df = pd.concat([df,dummies], axis=1)
df = df.drop('genre',1)
print(df)
## -- End pasted text --
genre kills
0 action 50
1 thriller 100
2 drama 150
kills action drama thriller
0 50 1.0 0.0 0.0
1 100 0.0 0.0 1.0
2 150 0.0 1.0 0.0
您可以使用
genres = df.Genre.str.split('|', expand=True)
为各种流派类型创建新栏目。然后将其与您的数据结合使用 pd.get_dummies()
与 .sum()
:
df = pd.concat([df.drop('Genre', axis=1), genres], axis=1)
df = df.set_index(['Film', 'Year', 'Body_Count', 'MPAA_Rating', 'Director', 'Length_Minutes', 'IMDB_Rating']).stack().reset_index(-1, drop=True)
df.columns = ['Genre']
df = pd.get_dummies(df).groupby(level=['Film', 'Body_Count']).sum()
df.head()
Fantasy ... Horror Music Musical \
Film Body_Count ...
24 Hour Party People 7 0.0 ... 0.0 1.0 0.0
28 Days Later 53 0.0 ... 1.0 0.0 0.0
28 Weeks Later 212 0.0 ... 1.0 0.0 0.0
30 Days of Night 67 0.0 ... 1.0 0.0 0.0
300 600 1.0 ... 0.0 0.0 0.0
Mystery Romance Sci-Fi Sport Thriller \
Film Body_Count
24 Hour Party People 7 0.0 0.0 0.0 0.0 0.0
28 Days Later 53 0.0 0.0 1.0 0.0 1.0
28 Weeks Later 212 0.0 0.0 1.0 0.0 1.0
30 Days of Night 67 0.0 0.0 0.0 0.0 1.0
300 600 0.0 0.0 0.0 0.0 0.0
War Western
Film Body_Count
24 Hour Party People 7 0.0 0.0
28 Days Later 53 0.0 0.0
28 Weeks Later 212 0.0 0.0
30 Days of Night 67 0.0 0.0
300 600 1.0 0.0
要从 index
中删除 Film
和 Body_Count
,请使用
df = df.reset_index()
我已将 https://figshare.com/articles/On_screen_movie_kill_counts_for_hundreds_of_films/889719 中的 csv "Body Count dataset" 作为数据框加载到我的 jupyter 笔记本中。
我的任务是进行线性回归以预测电影的 MPAA 评级。我听说,我的数据向量 X 应该包含列:Body_Count、IsAction、IsThriller 等等...
不幸的是,我不知道如何从我的数据集中获得这些统计数据,因为每种电影类型都被标记为 "thriller|action|drama"。
你知道怎么做吗?
df = pd.DataFrame({'genre': ['action', 'thriller', 'drama'], 'kills':[50,100,150]})
print(df)
dummies = pd.get_dummies(df['genre'])
df = pd.concat([df,dummies], axis=1)
df = df.drop('genre',1)
print(df)
## -- End pasted text --
genre kills
0 action 50
1 thriller 100
2 drama 150
kills action drama thriller
0 50 1.0 0.0 0.0
1 100 0.0 0.0 1.0
2 150 0.0 1.0 0.0
您可以使用
genres = df.Genre.str.split('|', expand=True)
为各种流派类型创建新栏目。然后将其与您的数据结合使用 pd.get_dummies()
与 .sum()
:
df = pd.concat([df.drop('Genre', axis=1), genres], axis=1)
df = df.set_index(['Film', 'Year', 'Body_Count', 'MPAA_Rating', 'Director', 'Length_Minutes', 'IMDB_Rating']).stack().reset_index(-1, drop=True)
df.columns = ['Genre']
df = pd.get_dummies(df).groupby(level=['Film', 'Body_Count']).sum()
df.head()
Fantasy ... Horror Music Musical \
Film Body_Count ...
24 Hour Party People 7 0.0 ... 0.0 1.0 0.0
28 Days Later 53 0.0 ... 1.0 0.0 0.0
28 Weeks Later 212 0.0 ... 1.0 0.0 0.0
30 Days of Night 67 0.0 ... 1.0 0.0 0.0
300 600 1.0 ... 0.0 0.0 0.0
Mystery Romance Sci-Fi Sport Thriller \
Film Body_Count
24 Hour Party People 7 0.0 0.0 0.0 0.0 0.0
28 Days Later 53 0.0 0.0 1.0 0.0 1.0
28 Weeks Later 212 0.0 0.0 1.0 0.0 1.0
30 Days of Night 67 0.0 0.0 0.0 0.0 1.0
300 600 0.0 0.0 0.0 0.0 0.0
War Western
Film Body_Count
24 Hour Party People 7 0.0 0.0
28 Days Later 53 0.0 0.0
28 Weeks Later 212 0.0 0.0
30 Days of Night 67 0.0 0.0
300 600 1.0 0.0
要从 index
中删除 Film
和 Body_Count
,请使用
df = df.reset_index()