Pandas 如何合并主要重复的行

Pandas 如何合并主要重复的行

在本文中,我们将介绍如何通过Pandas库将主要重复的行进行合并。假设我们有如下的数据集:

姓名 学科 分数
Tom Math 80
Tom Chm 85
Tom Phy 90
Jim Math 75
Jim Chm 80
Lucy Math 90
Lucy Phy 85
John Math 88

在这个简单的数据集中,我们有3个学科(Math,Chm和Phy),分别有4个学生的成绩,并且每个学生都参加了这三个学科的考试。然而,我们可以看到,有些学生(例如Tom)有多行数据,而其他学生(例如John)只有一行数据。

那么,如何将重复的行合并成一行,并计算每个学生的平均分?

阅读更多:Pandas 教程

使用 groupby 和 aggregate 函数

Pandas库中的groupby函数可以将数据集根据指定的列进行分组,并对每个组应用不同的函数。在这里,我们可以使用groupby函数将数据集按照“姓名”这一列进行分组,然后使用aggregate函数求出每个学生的平均分数。我们来看一下代码:

import pandas as pd
data = {'name': ['Tom', 'Tom', 'Tom', 'Jim', 'Jim', 'Lucy', 'Lucy', 'John'],
        'subject': ['Math', 'Chm', 'Phy', 'Math', 'Chm', 'Math', 'Phy', 'Math'],
        'score': [80, 85, 90, 75, 80, 90, 85, 88]}
df = pd.DataFrame(data)
result = df.groupby(['name']).aggregate({'score': 'mean'})
print(result)
Python

这里首先创建了一个带有姓名、成绩和科目三个列的数据集df,然后使用groupby函数对数据集按照姓名进行分组,并计算每个学生的平均分。

输出的结果是:

      score
name       
Jim    77.5
John   88.0
Lucy   87.5
Tom    85.0
Python

我们可以看到,现在每个学生都只有一行数据,并且每行的成绩是这个学生在所有学科中的平均分。

使用 pivot_table 函数

除了使用groupby和aggregate函数以外,我们还可以使用Pandas库中的pivot_table函数。pivot_table函数用于创建透视表,可以根据指定的列创建一个新的数据表,然后对每个单元格应用不同的函数。

在这里,我们可以使用pivot_table函数来创建一个关于学生成绩的透视表,然后对每个学生的成绩求平均值。我们来看一下代码:

import pandas as pd
data = {'name': ['Tom', 'Tom', 'Tom', 'Jim', 'Jim', 'Lucy', 'Lucy', 'John'],
        'subject': ['Math', 'Chm', 'Phy', 'Math', 'Chm', 'Math', 'Phy', 'Math'],
        'score': [80, 85, 90, 75, 80, 90, 85, 88]}
df = pd.DataFrame(data)
result = pd.pivot_table(df, index=['name'], values=['score'], aggfunc='mean')
print(result)
Python

这里的pivot_table函数的参数中:

  • index:指定行索引的列,即需要分组的列,这里是“姓名”列;
  • values:指定需要操作的数据列,这里是“成绩”列;
  • aggfunc:指定对每个单元格应用的函数,这里是求平均值。

输出结果如下:

      score
name       
Jim    77.5
John   88.0
Lucy  87.5
Tom    85.0
Python

和使用groupby和aggregate函数相比,使用pivot_table函数更加直观易懂,并且可以同时在行和列上分别进行分组和汇总计算。

使用 apply 函数

除了以上两种方法之外,我们还可以使用Pandas库中的apply函数来实现将重复的行进行合并的目的。对于一个包含重复行的数据集,我们可以使用apply函数将每行数据进行合并,并根据多个学科的成绩计算每个学生的平均成绩。

具体实现方式如下:

import pandas as pd
data = {'name': ['Tom', 'Tom', 'Tom', 'Jim', 'Jim', 'Lucy', 'Lucy', 'John'],
        'subject': ['Math', 'Chm', 'Phy', 'Math', 'Chm', 'Math', 'Phy', 'Math'],
        'score': [80, 85, 90, 75, 80, 90, 85, 88]}
df = pd.DataFrame(data)
result = df.groupby(['name']).apply(lambda x: pd.Series({'score': x['score'].mean()}))
print(result)
Python

这里使用lambda函数来对每个分组进行求平均值的计算,然后通过将计算结果转换为Series的形式来生成新的数据表。

输出的结果如下:

      score
name       
Jim    77.5
John   88.0
Lucy   87.5
Tom    85.0
Python

值得注意的是,使用apply函数来合并数据时,需要构造一个新的Series来包含要计算的统计信息。因为Pandas库中的apply函数默认返回一个包含原始数据的DataFrame,而不是一个Series。

总结

在这篇文章中,我们介绍了如何使用Pandas库将主要重复的行进行合并。通过使用groupby和aggregate函数、pivot_table函数以及apply函数,我们可以实现这一目的,并计算每个学生的平均成绩。这些技巧能够大大简化数据清洗和分析的过程,并加速我们对数据集的理解和掌握。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册