在Pandas中根据多列的值分割数据框架

  • Post category:Python

在Pandas中分割数据框架可以使用groupby()方法,该方法可以根据一列或多列的值来进行分组,也可以进行聚合操作。下面详细讲解如何根据多列的值分割数据框架。

1.首先导入Pandas库

import pandas as pd

2.创建一个包含多列数据的数据框架,例如:

df = pd.DataFrame({'Name':['Alice','Bob','Charlie','David','Emma','Frank','Gina','Helen','Iris'],
                     'Gender':['F','M','M','M','F','M','F','F','F'],
                     'Age':[21,23,22,25,20,28,27,24,26],
                     'Salary':[5000,6000,5500,7000,4800,8000,7500,6800,7100]})
print(df)

输出结果为:

      Name Gender  Age  Salary
0    Alice      F   21    5000
1      Bob      M   23    6000
2  Charlie      M   22    5500
3    David      M   25    7000
4     Emma      F   20    4800
5    Frank      M   28    8000
6     Gina      F   27    7500
7    Helen      F   24    6800
8     Iris      F   26    7100

3.根据两列的值进行分组,例如根据性别和年龄进行分组:

grouped = df.groupby(['Gender','Age'])

4.使用聚合函数,例如计算每组的平均工资:

avg_salary = grouped['Salary'].mean()
print(avg_salary)

输出结果为:

Gender  Age
F       20     4800
        21     5000
        24     6800
        26     7100
        27     7500
M       22     5500
        23     6000
        25     7000
        28     8000
Name: Salary, dtype: int64

5.如果希望将每组的平均工资添加到原始数据框架中,可以使用transform()方法:

df['AvgSalary'] = grouped['Salary'].transform('mean')
print(df)

输出结果为:

      Name Gender  Age  Salary  AvgSalary
0    Alice      F   21    5000     5000.0
1      Bob      M   23    6000     6000.0
2  Charlie      M   22    5500     5500.0
3    David      M   25    7000     7000.0
4     Emma      F   20    4800     4800.0
5    Frank      M   28    8000     8000.0
6     Gina      F   27    7500     7500.0
7    Helen      F   24    6800     6800.0
8     Iris      F   26    7100     7100.0

6.如果希望将每组的平均工资按照升序或降序排序,可以使用sort_values()方法:

df.sort_values(['Gender','Age','Salary'],ascending=[True,True,True],inplace=True)
print(df)

输出结果为:

      Name Gender  Age  Salary  AvgSalary
4     Emma      F   20    4800     4800.0
0    Alice      F   21    5000     5000.0
7    Helen      F   24    6800     6800.0
8     Iris      F   26    7100     7100.0
6     Gina      F   27    7500     7500.0
2  Charlie      M   22    5500     5500.0
1      Bob      M   23    6000     6000.0
3    David      M   25    7000     7000.0
5    Frank      M   28    8000     8000.0

至此,我们完成了根据多列的值分割数据框架的完整攻略。