将 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"。
你知道怎么做吗?

查看pandas.get_dummies

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 中删除 FilmBody_Count,请使用

df = df.reset_index()