Pandas:如何跨多列进行分组和聚合


通常,您可能希望对 pandas DataFrame 的多个列进行分组和聚合。

幸运的是,使用 pandas .groupby().agg()函数可以轻松做到这一点。

本教程解释了这些函数的实际使用的几个示例。

示例 1:按两列分组并求平均值

假设我们有以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
print (df)

  team position assists rebounds
0 AG 5 11
1 BG 7 8
2 BF 7 10
3 BG 8 6
4 BF 5 6
5 MF 7 9
6 MC 6 6
7 MC 9 10

以下代码显示了如何按“团队”和“位置”列进行分组并查找平均传球次数:

 df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()


        team position assists
                          mean
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

输出告诉我们:

  • A队G位置球员的平均助攻数为5.0次
  • B队F位球员的平均助攻数为6.0次
  • B队G位置球员的平均助攻数为7.5次

等等。

我们还可以使用以下代码来重命名生成的 DataFrame 的列:

 #group by team and position and find mean assists
new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()

#rename columns
new.columns = ['team', 'pos', 'mean_assists']

#view DataFrame
print (new)

	team pos mean_assists
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

示例2:按两列分组并查找多个统计信息

假设我们使用与前面的示例相同的 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

以下代码显示了如何查找按“球队”和“位置”列分组的篮板中位数和最大篮板数:

 df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index ()


        team position rebounds
                         median max
0 A G 11 11
1 B F 8 10
2 B G 7 8
3 M C 8 10
4 M F 9 9

输出告诉我们:

  • A 队 G 位置球员的篮板中位数为11
  • A队G位置球员的篮板上限为11个
  • B队F位球员的篮板数中位数为8
  • B队F位球员的篮板上限为10个

等等。

其他资源

如何根据多个条件过滤 Pandas DataFrame
如何计算 Pandas DataFrame 中的缺失值
如何堆叠多个 Pandas DataFrame

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注