Pandas:如何按索引分组并执行计算


您可以使用以下方法对 pandas 中的一个或多个索引列进行分组并进行计算:

方法一:按索引列分组

 df. groupby (' index1 ')[' numeric_column ']. max ()

方法2:按多个索引列分组

 df. groupby ([' index1 ',' index2 '])[' numeric_column ']. sum ()

方法三:按索引列和常规列分组

 df. groupby ([' index1 ',' numeric_column1 '])[' numeric_column2 ']. nunique ()

以下示例展示了如何将每种方法与以下具有 MultiIndex 的 pandas DataFrame 一起使用:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'G', 'F', 'F', 'G', 'G', 'F', 'F', 'F'],
                   ' points ': [7, 7, 7, 19, 16, 9, 10, 10, 8, 8],
                   ' rebounds ': [8, 8, 8, 10, 11, 12, 13, 13, 15, 11]})

#set 'team' column to be index column
df. set_index ([' team ', ' position '], inplace= True )

#view DataFrame
df

		 rebound points
team position		
A G 7 8
        G 7 8
        G 7 8
        F 19 10
        F 16 11
B G 9 12
        G 10 13
        F 10 13
        F 8 15
        F 8 11

方法一:按索引列分组

以下代码显示如何查找按“位置”索引列分组的“点”列的最大值:

 #find max value of 'points' grouped by 'position index column
df. groupby (' position ')[' points ']. max ()

position
F 19
G 10
Name: points, dtype: int64

方法2:按多个索引列分组

以下代码显示如何查找按“团队”和“位置”索引列分组的“积分”列的总和:

 #find max value of 'points' grouped by 'position index column
df. groupby ([' team ', ' position '])[' points ']. sum ()

team position
AF35
      G21
BF 26
      G 19
Name: points, dtype: int64

方法三:按索引列和常规列分组

以下代码显示了如何查找“篮板”列中唯一值的数量,这些值按“球队”索引列和常规“得分”列分组:

 #find max value of 'points' grouped by 'position index column
df. groupby ([' team ', ' points '])[' rebounds ']. nunique ()

team points
At 7 1
      16 1
      19 1
B 8 2
      9 1
      10 1
Name: rebounds, dtype: int64

其他资源

以下教程解释了如何在 pandas 中执行其他常见操作:

如何计算pandas中的唯一值
如何展平 Pandas 中的多重索引
如何修改Pandas中的一个或多个索引值
如何重置 Pandas 中的索引

添加评论

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