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

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
  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
pandas中的`groupby()`方法是对数据按照指定的列进行分组操作,将同一组的数据放在一起。 `groupby()`方法的基本用法如下: ```python grouped = df.groupby('列名') ``` 其中,`df`是一个DataFrame对象,`列名`是需要进行分组的列名。 调用`groupby()`方法后,会返回一个`DataFrameGroupBy`对象,可以对其进行聚合操作,例如`sum()`、`mean()`等。 下面是一些常用的`groupby()`方法的示例: 1. 对单个列进行分组,并对另一列求和: ```python grouped = df.groupby('列名') result = grouped['另一列'].sum() ``` 2. 对多个列进行分组,并对另一列求和: ```python grouped = df.groupby(['列名1', '列名2']) result = grouped['另一列'].sum() ``` 3. 对单个列进行分组,并对多列求和: ```python grouped = df.groupby('列名') result = grouped[['另一列1', '另一列2']].sum() ``` 4. 对单个列进行分组,并对另一列求平均值: ```python grouped = df.groupby('列名') result = grouped['另一列'].mean() ``` 5. 对单个列进行分组,并对另一列进行多个聚合操作: ```python grouped = df.groupby('列名') result = grouped['另一列'].agg(['sum', 'mean', 'count']) ``` 6. 对单个列进行分组,并对多列进行多个聚合操作: ```python grouped = df.groupby('列名') result = grouped.agg({'另一列1': ['sum', 'mean'], '另一列2': 'count'}) ``` 上述示例中,`result`均为一个新的DataFrame对象,其中包含了分组后的聚合结果。 除了上述示例中的聚合操作外,`groupby()`方法还可以进行其他一些操作,例如`apply()`、`filter()`、`transform()`等,可以根据实际需要进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

twinkle 222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值