Pandas:将pandas groupby的结果合并回DataFrame

Pandas:将pandas groupby的结果合并回DataFrame

在数据分析领域中,Pandas是一个非常流行的Python库。我们可以使用Pandas对数据进行处理,以便更轻松地分析它们。其中,groupby()是一个十分有用的函数,可以让我们对数据进行分组。但是,使用groupby()函数后,我们有时候需要将处理后的结果重新合并回原始的DataFrame中。本文将介绍如何将pandas groupby的结果合并回DataFrame。

阅读更多:Pandas 教程

什么是pandas groupby函数?

首先,让我们来介绍一下groupby()函数。该函数可以按照我们指定的列或者多列,对数据集进行分组。例如,我们可以使用下面的代码对数据集进行分组:

import pandas as pd

data = {'Name': ['John', 'Amy', 'Mike', 'Ann','John', 'Amy'], 
        'Gender': ['M', 'F', 'M', 'F', 'M', 'F'], 
        'Salary': [5000, 6000, 4500, 7000, 5500, 6500]}

df = pd.DataFrame(data)
grouped = df.groupby(['Name', 'Gender'])
print(grouped.mean())
Python

输出结果如下:

              Salary
Name Gender        
Amy  F        6250.0
John M        5250.0
Mike M        4500.0
Ann  F        7000.0
Python

这里,我们对数据集按照”Name”和”Gender”两列进行了分组。接着,我们计算了每个分组的平均工资,并使用mean()函数输出了结果。

将pandas groupby的结果合并回DataFrame

现在,我们已经知道如何使用groupby()函数进行数据分组。但是,当我们需要将处理后的结果重新合并回原始的DataFrame中时,应该如何实现呢?下面将介绍三种不同的方法:

方法一:使用merge()函数

使用merge()函数可以将groupby结果重新合并到原始DataFrame中。例如,我们可以使用下面的代码实现:

import pandas as pd

data = {'Name': ['John', 'Amy', 'Mike', 'Ann','John', 'Amy'], 
        'Gender': ['M', 'F', 'M', 'F', 'M', 'F'], 
        'Salary': [5000, 6000, 4500, 7000, 5500, 6500]}

df = pd.DataFrame(data)
grouped = df.groupby(['Name', 'Gender']).mean().reset_index()
merged = pd.merge(df, grouped, on=['Name', 'Gender'], how='left')
print(merged)
Python

输出结果如下:

   Name Gender  Salary_x  Salary_y
0  John      M      5000    5250.0
1   Amy      F      6000    6250.0
2  Mike      M      4500    4500.0
3   Ann      F      7000    7000.0
4  John      M      5500    5250.0
5   Amy      F      6500    6250.0
Python

这里,我们使用merge()函数将原始的DataFrame和groupby()处理后的结果进行合并。关于merge()函数的详细用法,可以查看Pandas官方文档

方法二:使用transform()函数

另一种将pandas groupby的结果合并回DataFrame的方法是使用transform()函数。transform()函数可以将分组操作的结果转换为原始数据集的形式,并且可以应用于任何pandas函数,例如mean()、std()等。下面是一个例子:

import pandas as pd

data = {'Name': ['John', 'Amy', 'Mike', 'Ann','John', 'Amy'], 
        'Gender': ['M', 'F', 'M', 'F', 'M', 'F'], 
        'Salary': [5000, 6000, 4500,7000, 5500, 6500]}

df = pd.DataFrame(data)
grouped = df.groupby(['Name', 'Gender'])
df['Mean Salary'] = grouped['Salary'].transform('mean')
print(df)
Python

输出结果如下:

   Name Gender  Salary  Mean Salary
0  John      M    5000       5250.0
1   Amy      F    6000       6250.0
2  Mike      M    4500       4500.0
3   Ann      F    7000       7000.0
4  John      M    5500       5250.0
5   Amy      F    6500       6250.0
Python

这里,我们对数据集按照”Name”和”Gender”两列进行了分组。接着,我们通过transform()函数将分组处理后的结果转换为原始数据集的形式,并添加了一个新列”Mean Salary”,其中存储了每个分组的平均工资。

方法三:使用apply()函数

apply()函数是另一种将pandas groupby的结果合并回DataFrame的方法。我们可以定义一个函数来操作分组的结果,并将它应用于原始的DataFrame。下面是一个例子:

import pandas as pd

data = {'Name': ['John', 'Amy', 'Mike', 'Ann','John', 'Amy'], 
        'Gender': ['M', 'F', 'M', 'F', 'M', 'F'], 
        'Salary': [5000, 6000, 4500, 7000, 5500, 6500]}

df = pd.DataFrame(data)
grouped = df.groupby(['Name', 'Gender'])

def add_mean_salary(group):
    mean_salary = group['Salary'].mean()
    group['Mean Salary'] = mean_salary
    return group

df = grouped.apply(add_mean_salary).reset_index(drop=True)
print(df)
Python

输出结果如下:

   Name Gender  Salary  Mean Salary
0   Amy      F    6000       6250.0
1   Amy      F    6500       6250.0
2   Ann      F    7000       7000.0
3  John      M    5000       5250.0
4  John      M    5500       5250.0
5  Mike      M    4500       4500.0
Python

这里,我们定义了一个函数add_mean_salary()来操作分组的结果。在该函数中,我们计算了每个分组的平均工资,并添加了一个新列”Mean Salary”。接着,我们使用apply()函数对原始数据集进行操作,并通过reset_index()函数重新设置索引。

总结

在本文中,我们介绍了如何将pandas groupby的结果合并回DataFrame中。我们介绍了三种不同的方法,包括使用merge()函数、transform()函数和apply()函数。这些方法都可以将处理后的结果重新合并回原始的DataFrame中。在实际的数据分析中,我们应该根据具体情况选择合适的方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册