Pandas:如何按值范围分组


在执行聚合之前,您可以使用以下语法使用 pandas 中的groupby()函数按值范围对列进行分组:

 df. groupby (pd. cut (df[' my_column '], [0, 25, 50, 75, 100])). sum ()

此特定示例将根据名为my_column的列中的以下值范围对 DataFrame 的行进行分组:

  • (0.25]
  • (25, 50]
  • (50, 75]
  • (75, 100]

然后,它将使用这些值范围作为组来计算 DataFrame 所有列中的值的总和。

以下示例展示了如何在实践中使用此语法。

示例:如何在 Pandas 中按值范围进行分组

假设我们有以下 pandas DataFrame,其中包含有关不同零售商店的规模及其总销售额的信息:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store_size ': [14, 25, 26, 29, 45, 58, 67, 81, 90, 98],
                   ' sales ': [15, 18, 24, 25, 20, 35, 34, 49, 44, 49]})

#view DataFrame
print (df)

   store_size sales
0 14 15
1 25 18
2 26 24
3 29 25
4 45 20
5 58 35
6 67 34
7 81 49
8 90 44
9 98 49

我们可以使用以下语法根据store_size列的特定范围对 DataFrame 进行分组,然后使用范围作为组来计算 DataFrame 中所有其他列的总和:

 #group by ranges of store_size and calculate sum of all columns
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100])). sum ()

	 store_size sales
store_size		
(0.25] 39 33
(25, 50] 100 69
(50, 75] 125 69
(75, 100] 269 142

从结果我们可以看出:

  • 对于 store_size 值在 0 到 25 之间的行,store_size 的总和为39 ,销售额的总和为33
  • 对于 store_size 值在 25 到 50 之间的行,store_size 的总和为100 ,销售额的总和为69

等等。

如果需要,您还可以只计算每个store_size范围的销售额总和:

 #group by ranges of store_size and calculate sum of sales
df. groupby (pd. cut (df[' store_size '], [0, 25, 50, 75, 100]))[' sales ']. sum ()

store_size
(0.25] 33
(25, 50] 69
(50, 75] 69
(75, 100] 142
Name: sales, dtype: int64

您还可以使用 NumPy arange()函数将变量分解为范围,而无需手动指定每个分割点:

 import numpy as np

#group by ranges of store_size and calculate sum of sales
df. groupby (pd. cut (df[' store_size '], np. arange (0, 101, 25)))[' sales ']. sum ()

store_size
(0.25] 33
(25, 50] 69
(50, 75] 69
(75, 100] 142
Name: sales, dtype: int64

请注意,这些结果与前面的示例相匹配。

注意:您可以在此处找到 NumPy arange()函数的完整文档。

其他资源

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

Pandas:如何使用groupby计算唯一值
Pandas:如何计算groupby中列的平均值和范数
Pandas:如何在 groupby 中使用 as_index

添加评论

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