我的数据框中有有关员工工资的数据。每个员工还存储了有关其性别、纪律、获得博士学位后的年限以及在当前雇主工作年限的数据。数据示例如下。
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 年的男性等。我可以得到一系列工作年限范围内的 worker 的平均值,而无需按通过做的事情来性别:
serviceSalary = data.groupby(pd.cut(data['yrs.service'], np.arange(0, 70,
10)))['salary'].mean()
我还可以做什么来向该变量添加第三个分组?
最佳答案
您可以使用列表作为第一个参数对多个列进行分组,而不是仅一个:
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
关于python - 分组数据的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205096/