pd.groupby的2种用法

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

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

相关推荐

  1. pd.groupby2

    2023-12-31 13:52:04       36 阅读
  2. C# 四定时器

    2023-12-31 13:52:04       15 阅读
  3. Servlet

    2023-12-31 13:52:04       9 阅读
  4. 2.PHP数组

    2023-12-31 13:52:04       33 阅读
  5. Flutter路由

    2023-12-31 13:52:04       42 阅读
  6. 分享7SQL进阶

    2023-12-31 13:52:04       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 13:52:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 13:52:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 13:52:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 13:52:04       18 阅读

热门阅读

  1. Linux Shell 013-文本列过滤工具cut

    2023-12-31 13:52:04       40 阅读
  2. 09.kubernetes 部署calico / flannel网络插件

    2023-12-31 13:52:04       41 阅读
  3. MySql 第三方工具SQL Sugar

    2023-12-31 13:52:04       32 阅读
  4. 解密垃圾邮件分类:基于SVM的数据挖掘项目

    2023-12-31 13:52:04       42 阅读
  5. BFC(解决高度塌陷的问题)

    2023-12-31 13:52:04       29 阅读
  6. 2023年总结:不上班的这半年!

    2023-12-31 13:52:04       36 阅读
  7. ubuntu22.04,matlab问题记录

    2023-12-31 13:52:04       42 阅读
  8. PC端微信公众号文章采集

    2023-12-31 13:52:04       35 阅读