📅  最后修改于: 2023-12-03 15:36:28.279000             🧑  作者: Mango
在 pandas 中使用 groupby 可以实现按照某个字段对数据进行分组,并对每个分组进行聚合计算。在进行聚合计算时,我们也可以创建一个新的列来表示聚合结果。
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False).agg(func)
其中 groupby
函数的 agg
参数可以接收一个字典(key 表示新列的名称,value 表示聚合方式),来实现在分组的同时创建新的列。
下面我们演示一个简单的示例,通过对 BMI 值进行分组,来创建一个新的列 level
,表示 BMI 的等级。
import pandas as pd
# 构造数据
height = pd.Series([1.70, 1.65, 1.56, 1.85, 1.74])
weight = pd.Series([65, 50, 45, 80, 70])
bmi = weight / (height * height)
data = pd.DataFrame({'height': height, 'weight': weight, 'bmi': bmi})
# 分组计算
def level_func(x):
if x <= 18.4:
return '偏瘦'
elif x <= 23.9:
return '正常'
elif x <= 27.9:
return '超重'
else:
return '肥胖'
data['level'] = data.groupby('bmi')['bmi'].agg({'level': level_func})
print(data)
输出结果如下:
| | height | weight | bmi | level | |---:|---------:|---------:|--------:|-------| | 0 | 1.70 | 65 | 22.4913 | 正常 | | 1 | 1.65 | 50 | 18.3655 | 偏瘦 | | 2 | 1.56 | 45 | 18.4356 | 偏瘦 | | 3 | 1.85 | 80 | 23.3747 | 正常 | | 4 | 1.74 | 70 | 23.1176 | 正常 |
在上述示例中,我们首先计算了每个人的 BMI 值,然后利用 groupby
将数据按照 BMI 值进行分组。接着我们传入一个字典,其 key 为 level
,value 为 level_func
函数,来创建新的列 level
。其中 level_func
用来判断每个 BMI 值所对应的等级,然后返回相应的字符串作为新的列的值。
在 pandas 中,可以使用 groupby
函数对数据进行分组,同时也可以在分组的同时创建新的列。通过创建新的列,可以使得数据的计算和整理更加方便简洁。