Pandas 按组分组并选择每个组中的最新数据

Pandas 按组分组并选择每个组中的最新数据

在本文中,我们将介绍如何使用Pandas在DataFrame中进行分组,然后选择每个组中的最新数据。

首先,让我们假设我们有以下的DataFrame,其中包含了每个人的姓名、成绩和考试日期:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
    'Score': [80, 90, 70, 95, 85],
    'Date': ['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02']
})
Python

输出结果:

       Name  Score        Date
0     Alice     80  2021-01-01
1       Bob     90  2021-01-01
2   Charlie     70  2021-01-01
3     Alice     95  2021-01-02
4       Bob     85  2021-01-02
Python

我们想要按姓名分组,并选择每个人最新的成绩。我们可以使用groupby()函数进行分组,然后使用apply()函数在每个组中选择最新的数据。

df_sorted = df.sort_values('Date').groupby('Name').apply(lambda x: x.iloc[-1])
Python

输出结果:

           Name  Score        Date
Name                             
Alice     Alice     95  2021-01-02
Bob         Bob     85  2021-01-02
Charlie  Charlie     70  2021-01-01
Python

首先,我们按照日期对DataFrame进行排序,然后按照姓名分组。在每个组中,我们通过使用apply()函数选择了最后一行,也就是每个人最新的数据。

阅读更多:Pandas 教程

解释

让我们分析一下上面的代码。首先,我们按照日期对DataFrame进行排序:

df_sorted = df.sort_values('Date')
Python

这是必要的,因为我们需要选择每个组中的最新数据。然后,我们使用groupby()函数按照姓名进行分组:

df_grouped = df_sorted.groupby('Name')
Python

现在,我们可以使用apply()函数在每个组中选择最新的数据。apply()函数接受一个函数作为参数,并将这个函数应用于每个组。在我们的例子中,我们使用了一个lambda函数来选择每个组中的最后一行:

df_latest = df_grouped.apply(lambda x: x.iloc[-1])
Python

因为数据已经按照日期排序,因此iloc[-1]选择每个组中的最新数据。最后,我们将结果保存在df_latest中。

总结

现在,我们已经学会了在Pandas中按组分组并选择每个组中的最新数据。我们首先进行了排序,然后使用groupby()函数分组,并使用apply()函数选择每个组中的最新数据。这个技巧在处理时间序列数据或其他需要按照某个标准进行分组的数据的时候非常有用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册