【问题标题】:plotting average by each genres; pandas绘制每种类型的平均值;熊猫
【发布时间】:2017-11-28 07:31:04
【问题描述】:
import numpy as np
df = df.dropna(subset=['genres']).reset_index(drop=True) 

splitted = df['genres'].str.split('|')  
l = splitted.str.len()

x = df['gross'] / df['budget']

df = pd.DataFrame({x: np.repeat(df[x], l), 'genres':np.concatenate(splitted)}) 



d = {'mean':'Average Income'}
df1 = df.groupby('genres')[x].agg(['mean']).rename(columns=d) 

df1.plot.bar() 

plt.yscale("log") 
plt.xlabel("Genre") 

我想绘制每个“x”的平均值来表示有多少类型[因为一部电影有多种类型,我将它们分成单个类型],但我不确定有什么问题我的代码。它没有做我想要的。我需要一些帮助。

Here's the error message

【问题讨论】:

    标签: pandas matplotlib


    【解决方案1】:

    我认为如果需要聚合只使用一个更常见的函数groupby + mean

    import numpy as np
    
    df = pd.DataFrame({'genres':['Comedy|Crime|Drama|Thriller','Comedy|Crime|Drama',
                       'Comedy|Crime','Drama|Thriller','Drama','Comedy|Crime'],
                       'gross':[10,20,30,40,50,60],
                       'budget':[3,4,5,3,2,5]})
    
    
    df = df.dropna(subset=['genres']).reset_index(drop=True) 
    
    splitted = df['genres'].str.split('|')  
    l = splitted.str.len()
    
    x = df['gross'] / df['budget']
    
    #is necessary define new column name (divided) and change `df[]` to `x`  
    df = pd.DataFrame({'divided': np.repeat(x, l), 'genres':np.concatenate(splitted)}) 
    print (df)
          divided    genres
    0    3.333333    Comedy
    1    3.333333     Crime
    2    3.333333     Drama
    3    3.333333  Thriller
    4    5.000000    Comedy
    5    5.000000     Crime
    6    5.000000     Drama
    7    6.000000    Comedy
    8    6.000000     Crime
    9   13.333333     Drama
    10  13.333333  Thriller
    11  25.000000     Drama
    12  12.000000    Comedy
    13  12.000000     Crime
    

    #define column for aggregate (divided), no x, because processing new df created by repeat 
    d = {'mean':'Average Income'}
    df1 = df.groupby('genres')['divided'].mean().rename(columns=d).reset_index(name='return')
    
    
    df1.plot.bar(x='genres', y='return') 
    
    plt.yscale("log") 
    plt.xlabel("Genre") 
    

    【讨论】:

    • 图表显示,但 x 轴没有流派名称,而是数字。
    • 在上面发布了你的输出
    • 哈哈不同的电脑。旧的仍然有效只是混淆了两个帐户:P
    • 是的,完全正确。谢谢。
    • 再次感谢您的大力帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2018-06-17
    • 2015-09-11
    • 2018-09-20
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多