【问题标题】:Converting a dataframe in pandas to another one将 pandas 中的数据框转换为另一个数据框
【发布时间】:2016-06-02 17:15:55
【问题描述】:

我已将来自 https://figshare.com/articles/On_screen_movie_kill_counts_for_hundreds_of_films/889719 的 csv“身体计数数据集”作为数据框加载到我的 jupyter 笔记本中。
我的任务是进行线性回归以预测电影 MPAA 评级。我听说我的数据向量 X 应该包含列:Body_Count、IsAction、IsThriller 等等...
不幸的是,我不知道如何从我的数据集中获得这些统计数据,因为每种电影类型都被标记为“惊悚片|动作|戏剧”。
你有什么想法可以做到吗?

【问题讨论】:

    标签: python pandas dataframe logistic-regression


    【解决方案1】:

    你可以使用

    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()
    

    【讨论】:

    • 谢谢!我需要做的另一件事是将体数和体裁的数据制作成一个矩阵,这样我就可以执行一些回归任务。但尸体数量似乎是一个指标。你知道我该如何处理吗?
    • 对结果使用 .reset_index()。
    • 我有最后一个问题 - 处理完我的数据后,数据框从 545 行缩小到 542 行,你知道是什么原因造成的吗?
    • 缺少数据,比如 3 部电影没有类型信息?
    • 是的,对不起,我是编程新手,如您所见 :) 谢谢您的宝贵时间 :)
    【解决方案2】:

    查看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
    

    【讨论】:

      猜你喜欢
      • 2022-08-13
      • 2021-12-13
      • 2020-06-17
      • 2019-05-14
      • 2014-08-19
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多