将一个变量的 value_counts() 与另一个变量的 mean() 相关联

Relating value_counts() of a variable with mean() of another variable

我有一个列出消费者投诉的数据框,我正在分析以下列:'Company',具有重复值,'Grade' 由客户提供,是从 1 到 5 的整数。

我长这样:

    | Company   |  Grade  |
-------------------------------
0   | Company1  |    5    |
1   | Company64 |    2    |
2   | Company1  |    1    |
3   | Company6  |    3    |
...

我想分析每家公司的投诉数量与客户给每家公司的评分的平均值()之间的关系。

我不确定执行此操作的最佳方法,到目前为止我创建了另一个 df (df2) 来保存这些值:

df2 = pd.DataFrame(columns= ('Complaints','Grade'))
df2['Complaints'] = df2['Company'].value_counts()
df2

          |  Complaints   |   Grade   |
--------------------------------------
Company1  |     5549      |    NaN
Company23 |     5403      |    NaN
Company8  |     3883      |    NaN
Company30 |     2493      |    NaN

我不确定如何在 df2

上为每个公司插入 df.Grade.mean() 的值

有人告诉我,我可以为此使用多重索引,方法是将公司分组到第一个 df,但我不确定如何进行。

之后,我将用 seaborn 绘制这个 df2 ,以一种非常清楚地看到这两个变量之间的关系的方式,所以如果有一个图表可以简化这个,请告诉我。

我会尝试使用更新功能:

df2.update(df1.groupby(['Company']).mean())

既然你说每家公司都有多个等级,你可以groupby“公司”并找到每家公司的平均等级。

grades = df1.groupby('Company')['Grade'].mean()

然后,在 df2 上做类似的工作,除了,你计算投诉:

complaints = df2.groupby('Company')['Complaints'].count()

现在join两个:

data = grades.join(complaints)

最后,因为你想看到平均成绩和投诉数量之间的关系,你可以使用散点图:

data.plot(kind='scatter', x='Complaints', y='Grade')