如何将此数据帧转换为按索引值平均得分的数据帧?

2024-06-16 11:10:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的数据框,葡萄酒品种,评论员和分数。我想制作一个新的数据框,它输出variable作为列标签,并按reviewer和variable列出平均分数。简单地说,我想输出一个数据帧,顶部是variable,reviewer作为索引,其中包含reviewer和variable的平均得分。我试过好几件事,但都没成功。你知道吗

实际的资料我会有更多的审稿人和更多的品种,但我想提供一个简化的版本。你知道吗

任何帮助都将不胜感激。先谢谢你。你知道吗

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]})

Tags: 数据标签variable分数sallypd我会bill
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

您可以按分组、计算平均值和透视结果:

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()将其从“长格式”转换为“宽格式”,并在本文顶部获得结果。你知道吗

您可以尝试:

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

相关问题 更多 >