我在数据框中有关于员工工资的数据。每位员工还有关于他们的性别,纪律,自获得博士学位以来的年数以及在当前雇主工作多年的数据。数据的一个例子如下。
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()
我还可以做些什么来为此变量添加第三个分组?
答案 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