分组数据的平均值

时间:2018-05-06 22:28:47

标签: python pandas numpy

我在数据框中有关于员工工资的数据。每位员工还有关于他们的性别,纪律,自获得博士学位以来的年数以及在当前雇主工作多年的数据。数据的一个例子如下。

    rank    dsc phd srv sex     salary
1   Prof    B   19  18  Male    139750
2   Prof    B   20  16  Male    173200
3   Asst    B   4   3   Male    79750
4   Prof    B   45  39  Male    115000
5   Prof    B   40  41  Male    141500
6   Assoc   B   6   6   Male    97000
7   Prof    B   30  23  Male    175000
8   Prof    B   45  45  Male    147765
9   Prof    B   21  20  Male    119250
10  Prof    B   18  18  Female  129000

我想要访问的是按性别和十年服务范围分组的所有员工的平均工资。例如;服务0 - 10年的男性,服务0-10年的女性,服务11到20年的男性等等。我可以得到一系列工作年龄范围的工人的平均值,而不是分开性别:

 serviceSalary = data.groupby(pd.cut(data['yrs.service'], np.arange(0, 70, 
 10)))['salary'].mean()

我还可以做些什么来为此变量添加第三个分组?

1 个答案:

答案 0 :(得分:4)

您可以使用列表作为第一个参数对多列进行分组,而不只是一个:

In [11]: df.groupby(pd.cut(df['srv'], np.arange(0, 70, 10)))['salary'].mean()
Out[11]:
srv
(0, 10]      88375.0
(10, 20]    140300.0
(20, 30]    175000.0
(30, 40]    115000.0
(40, 50]    144632.5
(50, 60]         NaN
Name: salary, dtype: float64

也可以通过'sex'

In [12]: df.groupby([pd.cut(df['srv'], np.arange(0, 70, 10)), 'sex'])['salary'].mean()
Out[12]:
srv       sex
(0, 10]   Male       88375.000000
(10, 20]  Female    129000.000000
          Male      144066.666667
(20, 30]  Male      175000.000000
(30, 40]  Male      115000.000000
(40, 50]  Male      144632.500000
Name: salary, dtype: float64