pd.groupby的2种用法

2023-12-31 13:06:03

pd.groupby的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 的内容如下:

citytemperaturehumidity
0Beijing1530
1Shanghai2045
2Guangzhou2560
3Beijing1035
4Shanghai1850
5Guangzhou2255

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

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

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

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

citytemperaturehumidity
Beijing12.532.5
Guangzhou23.557.5
Shanghai19.047.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()
unittsqty
0A2022-01-0110
1A2022-01-0215
2A2022-01-0320
3B2022-01-015
4B2022-01-0210
5B2022-01-0315

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

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

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

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

会得到以下的输出 DataFrame:

unittsqty
0A2022-01-01NaN
1A2022-01-025
2A2022-01-035
3B2022-01-01NaN
4B2022-01-025
5B2022-01-035

文章来源:https://blog.csdn.net/2301_81159774/article/details/135314183
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。