【问题标题】:Python get value counts from multiple columns and average from another columnPython从多列获取值计数并从另一列获取平均值
【发布时间】:2021-05-10 11:27:26
【问题描述】:

我有一个包含以下列的数据框

Movie    Rating  Genre_0     Genre_1    Genre_2
MovieA   8.9     Action      Comedy     Family
MovieB   9.1     Horror      NaN        NaN
MovieC   4.4     Comedy      Family     Adventure
MovieD   7.7     Action      Adventure  NaN
MovieE   9.5     Adventure   Comedy     NaN
MovieF   7.5     Horror      NaN        NaN
MovieG   8.6     Horror      NaN        NaN

我想要一个数据框,其中包含每种类型的值计数以及每次出现该类型时的平均评分

Genre     value_count   Average_Rating
Action    2             8.3  
Comedy    3             7.6
Horror    3             8.4
Family    2             6.7
Adventure 3             7.2

我已经尝试了以下代码并且能够获取值计数。但是,我无法根据每种类型出现的次数获得每种类型的平均评分。非常感谢任何形式的帮助,谢谢。

#create a list for the genre columns
genre_col = [col for col in df if col.startswith('Genre_')]

#get value counts of genres
genre_counts = df[genre_col].apply(pd.Series.value_counts).sum(1).to_frame(name='Count')
genre_counts.index.name = 'Genre'

genre_counts = genre_counts.reset_index()

【问题讨论】:

    标签: python pandas dataframe pandas-groupby series


    【解决方案1】:

    您可以.melt 数据帧然后group 然后在genre 上熔化帧并使用指定列及其相应聚合函数的字典进行聚合:

    # filter and melt the dataframe
    m = df.filter(regex=r'Rating|Genre').melt('Rating', value_name='Genre')
    
    # group and aggregate
    dct = {'Value_Count': ('Genre', 'count'), 'Average_Rating': ('Rating', 'mean')}
    df_out = m.groupby('Genre', as_index=False).agg(**dct)
    

    >>> df_out
    
           Genre  Value_Count  Average_Rating
    0     Action            2            8.30
    1  Adventure            3            7.20
    2     Comedy            3            7.60
    3     Family            2            6.65
    4     Horror            3            8.40
    

    【讨论】:

      【解决方案2】:

      将流派编码为其值计数的过程是频率编码,可以使用此代码完成

      df_frequency_map = df.Genre_0.value_counts().to_dict()
      df['Genre0_frequency_map'] = df.Genre_0.map(df_frequency_map)
      

      将平均值添加为数据集中的特征我认为您可以执行相同的操作,但在执行 to_dict() 函数之前计算平均值。

      df_frequency_map = df.df.Genre_0.value_counts().mean().to_dict()
      df['Genre0_mean_frequency_map'] = df.Genre_0.map(df_frequency_map)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 2014-09-06
        • 1970-01-01
        • 2014-11-13
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        相关资源
        最近更新 更多