pd.groupby的2种用法

pd.groupby的2种用法

    • 1、通常用法
    • 2、其他用法

1、通常用法

假设我们有一个 DataFrame,它包含了不同城市的天气数据:

import pandas as pd

data = {
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Beijing', 'Shanghai', 'Guangzhou'],
    'temperature': [15, 20, 25, 10, 18, 22],
    'humidity': [30, 45, 60, 35, 50, 55]
}

df = pd.DataFrame(data)

这个 DataFrame 的内容如下:

city temperature humidity
0 Beijing 15 30
1 Shanghai 20 45
2 Guangzhou 25 60
3 Beijing 10 35
4 Shanghai 18 50
5 Guangzhou 22 55

现在,我们想要计算每个城市的平均温度和湿度。我们可以使用 groupby 函数来实现这个需求:

df_grouped = df.groupby('city').mean()

这段代码首先使用 groupby('city') 将 DataFrame 按照 ‘city’ 列的值进行分组,然后使用 mean() 计算每一组的平均值。结果是一个新的 DataFrame,其索引是 ‘city’ 列的唯一值,每一行是对应城市的平均温度和湿度。

这个新的 DataFrame df_grouped 的内容如下:

city temperature humidity
Beijing 12.5 32.5
Guangzhou 23.5 57.5
Shanghai 19.0 47.5

可以看到,通常用法是将dataframe按照一列/多列进行分组后,对剩余的列聚合

如果剩余的列并不能同时做同一种操作呢?有2种方案,一是先选出目标列,在分组计算,如df_grouped = df[[‘…’ , ’…’ , …]].groupby(‘city’).mean(),另一种则是第2种用法

2、其他用法

首先,我们创建一个 DataFrame,然后按 ‘unit’ 列分组并对 ‘qty’ 列进行差分。以下是相应的代码:

import pandas as pd

# 创建 DataFrame
data = {
    'unit': ['A', 'A', 'A', 'B', 'B', 'B'],
    'ts': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
    'qty': [10, 15, 20, 5, 10, 15]
}
df = pd.DataFrame(data)

# 按 'unit' 列分组并对 'qty' 列进行差分
df['qty_diff'] = df.groupby('unit')['qty'].diff()
# 或者
df['qty_diff'] = df['qty'].groupby(df['unit']).diff()
unit ts qty
0 A 2022-01-01 10
1 A 2022-01-02 15
2 A 2022-01-03 20
3 B 2022-01-01 5
4 B 2022-01-02 10
5 B 2022-01-03 15

在这段代码中,我们首先创建了一个 DataFrame df

直接分组差分,会因为ts无法做减法而出错,

因此我们使用 groupby('unit') 将 DataFrame 按照 ‘unit’ 列的值进行分组,然后使用 diff() 对每一组的 ‘qty’ 列进行差分。差分的结果被存储在新的列 ‘qty_diff’ 中。

以上2种写法的等价的,可以先分组再选列,也可以先选列再分组,只是注意groupby里的参数会有点不同

会得到以下的输出 DataFrame:

unit ts qty
0 A 2022-01-01 NaN
1 A 2022-01-02 5
2 A 2022-01-03 5
3 B 2022-01-01 NaN
4 B 2022-01-02 5
5 B 2022-01-03 5

你可能感兴趣的:(python,算法)