📜  使用 groupby 在 pandas 中创建一个列 - Python (1)

📅  最后修改于: 2023-12-03 15:36:28.279000             🧑  作者: Mango

使用 groupby 在 pandas 中创建一个新列 - Python

在 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 函数对数据进行分组,同时也可以在分组的同时创建新的列。通过创建新的列,可以使得数据的计算和整理更加方便简洁。