如何将这个DataFrame转换为具有Index Index平均得分的DataFrame?

时间:2018-12-13 15:32:43

标签: python pandas dataframe

我有下面的数据框,上面有葡萄酒的种类,评价者和评分。我想制作一个新的DataFrame,将变量输出为列标签,并按审阅者和变量列出平均得分。简而言之,我想在顶部输出一个数据框,而将审阅者作为具有审阅者和多样性的平均得分的索引。我已经尝试了好几种方法,但无法正常工作。

实际信息中,我将拥有更多的评论者,种类更多,但我想提供一个简化的版本。

任何帮助将不胜感激。预先谢谢你。

import pandas as pd
df = pd.DataFrame({"Variety": ['Cabernet', 'Pinot', 'Cabernet', 'Pinot', 'Pinot', 'Cabernet', 'Pinot', 'Cabernet'],
               "Reviewer": ['Bill', 'Sally', 'Bill', 'Sally', 'Bill', 'Sally', 'Bill', 'Sally'],
               "Score": [90, 85, 87, 93, 80, 81, 93, 88]})

3 个答案:

答案 0 :(得分:3)

更像一个pivot问题

pd.pivot_table(df,index='Reviewer',columns='Variety',values='Score',aggfunc='mean')
Out[29]: 
Variety    Cabernet      Pinot
Reviewer                      
Bill      87.000000  87.666667
Sally     84.666667  93.000000

答案 1 :(得分:0)

您可以分组,计算均值并调整结果:

df.groupby(['Variety', 'Reviewer']).mean() \
                                   .reset_index() \
                                   .pivot(index='Reviewer', columns='Variety')
                Score      
Variety  Cabernet Pinot
Reviewer               
Bill         88.5  86.5
Sally        84.5  89.0

第一行计算均值,最后一行适当调整数据框的形状。第二行对于使.mean()函数的形状正确地生成pivot()输出是必需的。

分步

df.groupby(['Variety', 'Reviewer']).mean()
                  Score
Variety  Reviewer       
Cabernet Bill       88.5
         Sally      84.5
Pinot    Bill       86.5
         Sally      89.0

df.groupby(['Variety', 'Reviewer']).mean().reset_index()
        Variety Reviewer  Score
0  Cabernet     Bill   88.5
1  Cabernet    Sally   84.5
2     Pinot     Bill   86.5
3     Pinot    Sally   89.0

我们现在可以使用pd.pivot()将其从“长格式”转换为“宽格式”,并将结果显示在这篇文章的顶部。

答案 2 :(得分:0)

您可以尝试:

>>> df.groupby(['Reviewer', 'Variety']).mean()
                   Score
Reviewer Variety
Bill     Cabernet   88.5
         Pinot      86.5
Sally    Cabernet   84.5
         Pinot      89.0