📅  最后修改于: 2023-12-03 15:03:28.305000             🧑  作者: Mango
在使用pandas进行数据分组时,我们可以使用groupby()
函数。然后,我们可以对每个组的数据执行一些聚合操作,例如max()
,min()
,sum()
等。在本文中,我们将讨论如何针对多个列在Python中使用groupby()
函数的max()
方法。
在本例中,我们将使用pandas的read_csv()
方法从CSV文件中读取数据。我们将使用以下数据集:
| Name | Country | Age | Gender | Score | | ---- | ------- | --- | ------ | ----- | | Amy | USA | 25 | F | 87 | | Bob | Canada | 30 | M | 91 | | Cathy | USA | 28 | F | 90 | | David | Canada | 32 | M | 89 | | Emma | USA | 26 | F | 92 |
让我们看一下如何从CSV文件中读取这个数据集:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
输出:
Name Country Age Gender Score
0 Amy USA 25 F 87
1 Bob Canada 30 M 91
2 Cathy USA 28 F 90
3 David Canada 32 M 89
4 Emma USA 26 F 92
现在我们有了准备好的数据,我们可以开始使用groupby()
和max()
方法。
为了在多列上使用groupby()
和max()
方法,我们需要将列名称作为参数传递给groupby()
方法,并将列名称作为字典传递给agg()
方法,如下所示:
df.groupby('Country')[['Score', 'Age']].max()
输出:
Score Age
Country
Canada 91 32
USA 92 28
这里,我们按照Country
列分组,并返回分组中Score
和Age
列的最大值。请注意,我们使用双括号[[]]
来选择多个列,并将它们放置在一个列表中。
如果我们想对每个分组使用自定义列名,我们可以将自定义列名作为字典键,并将每个键与相应的聚合函数列表进行配对,如下所示:
df.groupby('Country').agg(
max_Score=('Score', 'max'),
max_Age=('Age', 'max')
)
输出:
max_Score max_Age
Country
Canada 91 32
USA 92 28
这里,我们对Country
列进行分组,并计算每个分组中Score
和Age
列的最大值。最后,我们将结果存储在具有自定义列名的新列中。
如果我们想将groupby()
方法返回的结果放入DataFrame中,并将Country
列转换为普通的列,则可以使用reset_index()
方法:
df.groupby('Country')[['Score', 'Age']].max().reset_index()
输出:
Country Score Age
0 Canada 91 32
1 USA 92 28
这里,我们将Country
列用作分组依据,返回Score
和Age
列的最大值,并使用reset_index()
方法将Country
列转换为普通的列。