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