分组d的平均值

2024-05-16 03:56:37 发布

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

我在数据框中有关于雇员工资的数据。每位员工还存储了有关其性别、学科、获得博士学位后的年数以及在当前雇主工作的年数的数据。数据示例如下。你知道吗

    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()

我还可以做些什么来向这个变量添加第三个分组?你知道吗


Tags: 数据示例dataservice员工male性别salary
1条回答
网友
1楼 · 发布于 2024-05-16 03:56:37

您可以将列表作为第一个参数,按多个列分组,这样就不必只使用一个参数:

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

相关问题 更多 >