Rav*_*ada 6 python pandas pandas-groupby
这是我的代码,其中包含我想使用pandas.DataFrame.groupby执行任务的数据
import pandas as pd
data = {'employees_no': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
'employees_name': ['Jugal Sompura', 'Maya Rajput', 'Chaitya Panchal', 'Sweta Rampariya', 'Prakshal Patel', 'Dhruv Panchal', 'Prachi Desai', 'Krunal Gosai', 'Hemil Soni', 'Gopal Pithadia', 'Jatin Shah', 'Raj Patel', 'Shreya Desai'],
'department_name': ['HR', 'Administrative Assistant', 'Production', 'Accountant', 'Production', 'Engineer', 'Finance', 'Engineer', 'Quality Assurance', 'Engineer', 'Engineer', 'Customer Service', 'CEO'],
'salary': [130000.0, 65000.0, 45000.0, 65000.0, 47000.0, 40000.0, 90000.0, 45000.0, 35000.0, 45000.0, 30000.0, 40000.0, 250000.0]
}
Run Code Online (Sandbox Code Playgroud)
df = pd.DataFrame (data, columns = ['employees_no', 'employees_name', 'department_name', 'salary'])
print(df)
---------------------------------------------------------------------
employees_no employees_name department_name salary
0 1 Jugal Sompura HR 130000.0
1 2 Maya Rajput Administrative Assistant 65000.0
2 3 Chaitya Panchal Production 45000.0
3 4 Sweta Rampariya Accountant 65000.0
4 5 Prakshal Patel Production 47000.0
5 6 Dhruv Panchal Engineer 40000.0
6 7 Prachi Desai Finance 90000.0
7 8 Krunal Gosai Engineer 45000.0
8 9 Hemil Soni Quality Assurance 35000.0
9 10 Gopal Pithadia Engineer 45000.0
10 11 Jatin Shah Engineer 30000.0
11 12 Raj Patel Customer Service 40000.0
12 13 Shreya Desai CEO 250000.0
---------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我试过了,只能得到这个输出。
print(df.groupby('department_name').agg({'salary':'mean'}))
---------------------------------------------------------------------
department_name salary
Accountant 65000.0
Administrative Assistant 65000.0
CEO 250000.0
Customer Service 40000.0
Engineer 40000.0
Finance 90000.0
HR 130000.0
Production 46000.0
Quality Assurance 35000.0
---------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我无法获得这样的输出...
department_name employees_name avg_salary
Accountant Sweta Rampariya 65000.0
Administrative Assistant Maya Rajput 65000.0
CEO Shreya Desai 250000.0
Customer Service Raj Patel 40000.0
Engineer Dhruv Panchal 40000.0
Gopal Pithadia
Krunal Gosai
Jatin Shah
Finance Prachi Desai 90000.0
HR Jugal Sompura 130000.0
Production Chaitya Panchal 46000.0
Prakshal Patel
Quality Assurance Hemil Soni 35000.0
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?
你需要pandas.DataFrame.groupby.transform:
df["avg_salary"] = df.groupby("department_name")["salary"].transform("mean")
new_df = df.set_index(["department_name", "employees_name"]).sort_index()
print(new_df["avg_salary"])
Run Code Online (Sandbox Code Playgroud)
输出:
department_name employees_name
Accountant Sweta Rampariya 65000.0
Administrative Assistant Maya Rajput 65000.0
CEO Shreya Desai 250000.0
Customer Service Raj Patel 40000.0
Engineer Dhruv Panchal 40000.0
Gopal Pithadia 40000.0
Jatin Shah 40000.0
Krunal Gosai 40000.0
Finance Prachi Desai 90000.0
HR Jugal Sompura 130000.0
Production Chaitya Panchal 46000.0
Prakshal Patel 46000.0
Quality Assurance Hemil Soni 35000.0
Name: avg_salary, dtype: float64
Run Code Online (Sandbox Code Playgroud)
扩展@Chris 所做的事情并添加如果部门名称相同则删除平均工资值的部分。
这是完整的代码:
import pandas as pd
data = {'employees_no': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
'employees_name': ['Jugal Sompura', 'Maya Rajput', 'Chaitya Panchal', 'Sweta Rampariya', 'Prakshal Patel', 'Dhruv Panchal', 'Prachi Desai', 'Krunal Gosai', 'Hemil Soni', 'Gopal Pithadia', 'Jatin Shah', 'Raj Patel', 'Shreya Desai'],
'department_name': ['HR', 'Administrative Assistant', 'Production', 'Accountant', 'Production', 'Engineer', 'Finance', 'Engineer', 'Quality Assurance', 'Engineer', 'Engineer', 'Customer Service', 'CEO'],
'salary': [130000.0, 65000.0, 45000.0, 65000.0, 47000.0, 40000.0, 90000.0, 45000.0, 35000.0, 45000.0, 30000.0, 40000.0, 250000.0]
}
df = pd.DataFrame (data)
df['avg_sal'] = df.groupby('department_name')['salary'].transform('mean')
new_df = df.set_index(["department_name", "employees_name"]).sort_index()
new_df.loc[new_df.index.get_level_values(0).duplicated()==True,'avg_sal']=''
print (new_df['avg_sal'])
Run Code Online (Sandbox Code Playgroud)
这将打印如下:
department_name employees_name
Accountant Sweta Rampariya 65000
Administrative Assistant Maya Rajput 65000
CEO Shreya Desai 250000
Customer Service Raj Patel 40000
Engineer Dhruv Panchal 40000
Gopal Pithadia
Jatin Shah
Krunal Gosai
Finance Prachi Desai 90000
HR Jugal Sompura 130000
Production Chaitya Panchal 46000
Prakshal Patel
Quality Assurance Hemil Soni 35000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |